* Table rows and ranges as LHS of formulas
@ 2011-03-01 14:28 Carsten Dominik
2011-03-01 15:10 ` Carsten Dominik
` (2 more replies)
0 siblings, 3 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-01 14:28 UTC (permalink / raw)
To: emacs-orgmode List
[-- Attachment #1: Type: text/plain, Size: 870 bytes --]
Hi everyone,
A frequently requested feature for tables has been to
be able to define row formulas in a way similar to column
formulas. The patch below allows things like
@3=
@2$2..@5$7=
@I$2..@II$4=
as the left hand side for table formulas in order to
write a formula that is valid for an entire column or
for a rectangular section in a table.
Note that in contrast to column formulas, @3= will not
automatically skip a "header column" or field formulas in the
same row. In fact, making both a range formula and a field
point to the same field is forbidden and throws an error.
So to have a formula apply to all but the first column, use
something like this:
@3$2..@3$8=....
Testing is welcome, but I am confident that this works
pretty well.
Bastien, please let me know if you want to have this integrated
before the release, then I will do so.
[-- Attachment #2: 0001-Implement-table-formulas-that-apply-to-field-ranges.patch --]
[-- Type: application/octet-stream, Size: 19428 bytes --]
From a8bfe81b33c4eeb5a46482c5435ace68d5c6ccf3 Mon Sep 17 00:00:00 2001
From: Carsten Dominik <carsten.dominik@gmail.com>
Date: Tue, 1 Mar 2011 09:05:56 +0100
Subject: [PATCH] Implement table formulas that apply to field ranges
* lisp/org-table.el (org-table-fedit-finish): Read more general LHS of formulas.
(org-table-current-ncol): New variable.
(org-table-line-to-dline): New function.
(org-table-get-stored-formulas): Accept range formulas as matches.
(org-table-get-specials): Compute and store the number of columns.
(org-table-get-range): New optional argument CORNERS-ONLY, to retrieve
only the region marked by the range, not the content.
(org-table-recalculate): Call `org-table-expand-lhs-ranges' to expand
range targets. Also check for duplicate access to fields.
(org-table-expand-lhs-ranges): New funktion.
(org-table-get-remote-range): Bind `org-table-current-ncol' to protect
the caller's value.
(org-table-edit-formulas): Support highlighting of range targets.
* doc/org.texi (Field and range formulas): Renamed from "Field formulas".
Document the use of range operators as targets.
---
doc/org.texi | 33 +++++++++----
lisp/org-table.el | 140 ++++++++++++++++++++++++++++++++++++++++++----------
2 files changed, 136 insertions(+), 37 deletions(-)
diff --git a/doc/org.texi b/doc/org.texi
index 5288604..f5fa976 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -378,7 +378,7 @@ The spreadsheet
* References:: How to refer to another field or range
* Formula syntax for Calc:: Using Calc to compute stuff
* Formula syntax for Lisp:: Writing formulas in Emacs Lisp
-* Field formulas:: Formulas valid for a single field
+* Field and range formulas:: Formula for specific (ranges of) fields
* Column formulas:: Formulas valid for an entire column
* Editing and debugging formulas:: Fixing formulas
* Updating the table:: Recomputing all dependent fields
@@ -670,6 +670,8 @@ Specific header arguments
directory for code block execution
* exports:: Export code and/or results
* tangle:: Toggle tangling and specify file name
+* mkdirp:: Toggle creation of parent directories of target
+ files during tangling
* comments:: Toggle insertion of comments in tangled
code files
* no-expand:: Turn off variable assignment and noweb
@@ -677,7 +679,7 @@ Specific header arguments
* session:: Preserve the state of code evaluation
* noweb:: Toggle expansion of noweb references
* cache:: Avoid re-evaluating unchanged code blocks
-* sep:: Specify delimiter for writing external tables
+* sep:: Delimiter for writing tabular results outside Org
* hlines:: Handle horizontal lines in tables
* colnames:: Handle column names in tables
* rownames:: Handle row names in tables
@@ -2243,7 +2245,7 @@ formula, moving these references by arrow keys
* References:: How to refer to another field or range
* Formula syntax for Calc:: Using Calc to compute stuff
* Formula syntax for Lisp:: Writing formulas in Emacs Lisp
-* Field formulas:: Formulas valid for a single field
+* Field and range formulas:: Formula for specific (ranges of) fields
* Column formulas:: Formulas valid for an entire column
* Editing and debugging formulas:: Fixing formulas
* Updating the table:: Recomputing all dependent fields
@@ -2501,7 +2503,7 @@ Calc also contains a complete set of logical operations. For example
if($1<20,teen,string("")) @r{``teen'' if age $1 less than 20, else empty}
@end example
-@node Formula syntax for Lisp, Field formulas, Formula syntax for Calc, The spreadsheet
+@node Formula syntax for Lisp, Field and range formulas, Formula syntax for Calc, The spreadsheet
@subsection Emacs Lisp forms as formulas
@cindex Lisp forms, as table formulas
@@ -2532,10 +2534,12 @@ like @code{"$3"}. Ranges are inserted as space-separated fields, so you can
'(apply '+ '($1..$4));N
@end example
-@node Field formulas, Column formulas, Formula syntax for Lisp, The spreadsheet
-@subsection Field formulas
+@node Field and range formulas, Column formulas, Formula syntax for Lisp, The spreadsheet
+@subsection Field and range formulas
@cindex field formula
+@cindex range formula
@cindex formula, for individual table field
+@cindex formula, for range of fields
To assign a formula to a particular field, type it directly into the
field, preceded by @samp{:=}, for example @samp{:=$1+$2}. When you
@@ -2565,7 +2569,14 @@ formula with default taken from the @samp{#+TBLFM:} line, applies
it to the current field, and stores it.
@end table
-@node Column formulas, Editing and debugging formulas, Field formulas, The spreadsheet
+The left hand side of the formula may also be a column or range reference in
+order to assign the same formula to a range of fields. These formulas can
+only be entered directly in the @code{#+TBLFM:} line, or by using the formula
+editor (@pxref{Editing and debugging formulas}). For example @code{@@5=...}
+will define a formula for all fields in row 5, and @code{@@1$1..@@2$2=...} will
+define a formula for the four fields in the rectangle.
+
+@node Column formulas, Editing and debugging formulas, Field and range formulas, The spreadsheet
@subsection Column formulas
@cindex column formula
@cindex formula, for table column
@@ -2575,7 +2586,9 @@ particular column. Instead of having to copy the formula to all fields
in that column, Org allows you to assign a single formula to an entire
column. If the table contains horizontal separator hlines, everything
before the first such line is considered part of the table @emph{header}
-and will not be modified by column formulas.
+and will not be modified by column formulas. Also, fields that have
+individual field or range formulas assigning to them will be skipped by
+column formulas.
To assign a formula to a column, type it directly into any field in the
column, preceded by an equal sign, like @samp{=$1+$2}. When you press
@@ -2617,7 +2630,7 @@ if possible. If you prefer to only work with the internal format (like
@table @kbd
@orgcmdkkc{C-c =,C-u C-c =,org-table-eval-formula}
Edit the formula associated with the current column/field in the
-minibuffer. See @ref{Column formulas}, and @ref{Field formulas}.
+minibuffer. See @ref{Column formulas}, and @ref{Field and range formulas}.
@orgcmd{C-u C-u C-c =,org-table-eval-formula}
Re-insert the active formula (either a
field formula, or a column formula) into the current field, so that you
@@ -2720,7 +2733,7 @@ following commands:
@table @kbd
@orgcmd{C-c *,org-table-recalculate}
Recalculate the current row by first applying the stored column formulas
-from left to right, and all field formulas in the current row.
+from left to right, and all field/range formulas in the current row.
@c
@kindex C-u C-c *
@item C-u C-c *
diff --git a/lisp/org-table.el b/lisp/org-table.el
index 56d927e..d4ae2b1 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -316,6 +316,8 @@ available parameters."
"Table begin line, non-nil only for the duration of a command.")
(defvar org-table-current-begin-pos nil
"Table begin position, non-nil only for the duration of a command.")
+(defvar org-table-current-ncol nil
+ "Number of columns in table, non-nil only for the duration of a command.")
(defvar org-table-dlines nil
"Vector of data line line numbers in the current table.")
(defvar org-table-hlines nil
@@ -1246,6 +1248,28 @@ However, when FORCE is non-nil, create new columns if necessary."
(error
"Please position cursor in a data line for column operations")))))
+(defun org-table-line-to-dline (line &optional above)
+ "Turn a buffer line number into a data line number.
+If there is no data line in this line, return nil.
+If there is no matchin dline (most likely te refrence was a hline), the
+first dline below it is used. When ABOVE is non-nil, the one above is used."
+ (catch 'exit
+ (let ((ll (length org-table-dlines))
+ i)
+ (if above
+ (progn
+ (setq i (1- ll))
+ (while (> i 0)
+ (if (<= (aref org-table-dlines i) line)
+ (throw 'exit i))
+ (setq i (1- i))))
+ (setq i 1)
+ (while (< i ll)
+ (if (>= (aref org-table-dlines i) line)
+ (throw 'exit i))
+ (setq i (1+ i)))))
+ nil))
+
(defun org-table-delete-column ()
"Delete a column from the table."
(interactive)
@@ -1966,7 +1990,7 @@ When NAMED is non-nil, look for a named equation."
(when (looking-at "\\([ \t]*\n\\)*[ \t]*#\\+TBLFM: *\\(.*\\)")
(setq strings (org-split-string (match-string 2) " *:: *"))
(while (setq string (pop strings))
- (when (string-match "\\`\\(@[0-9]+\\$[0-9]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*[^ \t]\\)" string)
+ (when (string-match "\\`\\(@[^= \t\n]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*[^ \t]\\)" string)
(setq scol (if (match-end 2)
(match-string 2 string)
(match-string 1 string))
@@ -2022,7 +2046,8 @@ For all numbers larger than LIMIT, shift them by DELTA."
org-table-named-field-locations nil
org-table-current-begin-line nil
org-table-current-begin-pos nil
- org-table-current-line-types nil)
+ org-table-current-line-types nil
+ org-table-current-ncol 0)
(goto-char beg)
(when (re-search-forward "^[ \t]*| *! *\\(|.*\\)" end t)
(setq names (org-split-string (match-string 1) " *| *")
@@ -2078,6 +2103,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
"[ \t]*|[ \t]*"))
(nfields (length fields))
al al2)
+ (setq org-table-current-ncol nfields)
(loop for i from 1 to nfields do
(push (list (format "LR%d" i) l i) al)
(push (cons (format "LR%d" i) (nth (1- i) fields)) al2))
@@ -2415,11 +2441,16 @@ $1-> %s\n" orig formula form0 form))
(progn (skip-chars-forward "^|") (point))
prop value)))
-(defun org-table-get-range (desc &optional tbeg col highlight)
+(defun org-table-get-range (desc &optional tbeg col highlight corners-only)
"Get a calc vector from a column, according to descriptor DESC.
Optional arguments TBEG and COL can give the beginning of the table and
the current column, to avoid unnecessary parsing.
-HIGHLIGHT means just highlight the range."
+
+HIGHLIGHT means just highlight the range.
+
+When CORNERS-ONLY is set, only return the corners of the range as
+a list (line1 column1 line2 column2) where line1 and line2 are line numbers
+in the buffer and column1 and column2 are table column numbers."
(if (not (equal (string-to-char desc) ?@))
(setq desc (concat "@" desc)))
(save-excursion
@@ -2448,7 +2479,8 @@ HIGHLIGHT means just highlight the range."
(if (not r2) (setq r2 thisline))
(if (not c1) (setq c1 col))
(if (not c2) (setq c2 col))
- (if (or (not rangep) (and (= r1 r2) (= c1 c2)))
+ (if (and (not corners-only)
+ (or (not rangep) (and (= r1 r2) (= c1 c2))))
;; just one field
(progn
(org-goto-line r1)
@@ -2460,22 +2492,26 @@ HIGHLIGHT means just highlight the range."
;; First sort the numbers to get a regular ractangle
(if (< r2 r1) (setq tmp r1 r1 r2 r2 tmp))
(if (< c2 c1) (setq tmp c1 c1 c2 c2 tmp))
- (org-goto-line r1)
- (while (not (looking-at org-table-dataline-regexp))
- (beginning-of-line 2))
- (org-table-goto-column c1)
- (setq beg (point))
- (org-goto-line r2)
- (while (not (looking-at org-table-dataline-regexp))
- (beginning-of-line 0))
- (org-table-goto-column c2)
- (setq end (point))
- (if highlight
- (org-table-highlight-rectangle
- beg (progn (skip-chars-forward "^|\n") (point))))
- ;; return string representation of calc vector
- (mapcar 'org-trim
- (apply 'append (org-table-copy-region beg end)))))))
+ (if corners-only
+ ;; Only return the corners of the range
+ (list r1 c1 r2 c2)
+ ;; Copy the range values into a list
+ (org-goto-line r1)
+ (while (not (looking-at org-table-dataline-regexp))
+ (beginning-of-line 2))
+ (org-table-goto-column c1)
+ (setq beg (point))
+ (org-goto-line r2)
+ (while (not (looking-at org-table-dataline-regexp))
+ (beginning-of-line 0))
+ (org-table-goto-column c2)
+ (setq end (point))
+ (if highlight
+ (org-table-highlight-rectangle
+ beg (progn (skip-chars-forward "^|\n") (point))))
+ ;; return string representation of calc vector
+ (mapcar 'org-trim
+ (apply 'append (org-table-copy-region beg end))))))))
(defun org-table-get-descriptor-line (desc &optional cline bline table)
"Analyze descriptor DESC and retrieve the corresponding line number.
@@ -2595,7 +2631,8 @@ known that the table will be realigned a little later anyway."
(line-re org-table-dataline-regexp)
(thisline (org-current-line))
(thiscol (org-table-current-column))
- beg end entry eqlnum eqlname eqlname1 eql (cnt 0) eq a name)
+ seen-fields
+ beg end entry eqlnum eqlname eqlname1 eql (cnt 0) eq a name name1)
;; Insert constants in all formulas
(setq eqlist
(mapcar (lambda (x)
@@ -2608,6 +2645,10 @@ known that the table will be realigned a little later anyway."
(push eq eqlnum)
(push eq eqlname)))
(setq eqlnum (nreverse eqlnum) eqlname (nreverse eqlname))
+ ;; Expand ranges in lhs of formulas
+ (setq eqlname (org-table-expand-lhs-ranges eqlname))
+
+ ;; Get the correct line range to process
(if all
(progn
(setq end (move-marker (make-marker) (1+ (org-table-end))))
@@ -2626,11 +2667,19 @@ known that the table will be realigned a little later anyway."
(goto-char beg)
(and all (message "Re-applying formulas to full table..."))
- ;; First find the named fields, and mark them untouchable
+ ;; First find the named fields, and mark them untouchable.
+ ;; Also check if several field/range formulas try to set the same field.
(remove-text-properties beg end '(org-untouchable t))
(while (setq eq (pop eqlname))
(setq name (car eq)
a (assoc name org-table-named-field-locations))
+ (setq name1 name)
+ (if a (setq name1 (format "@%d$%d" (org-table-line-to-dline (nth 1 a))
+ (nth 2 a))))
+ (when (member name1 seen-fields)
+ (error "Several field/range formulas try to set %s" name1))
+ (push name1 seen-fields)
+
(and (not a)
(string-match "@\\([0-9]+\\)\\$\\([0-9]+\\)" name)
(setq a (list name
@@ -2646,7 +2695,7 @@ known that the table will be realigned a little later anyway."
(org-table-goto-column (nth 2 a))
(push (append a (list (cdr eq))) eqlname1)
(org-table-put-field-property :org-untouchable t)))
-
+
;; Now evaluate the column formulas, but skip fields covered by
;; field formulas
(goto-char beg)
@@ -2735,6 +2784,35 @@ known that the table will be realigned a little later anyway."
(setq checksum c1)))
(error "No convergence after %d iterations" imax))))))
+(defun org-table-expand-lhs-ranges (equations)
+ "Expand list of formulas.
+If some of the RHS in the formulas are ranges or a row reference, expand
+them to individual field equations for each field."
+ (let (e res lhs rhs range r1 r2 c1 c2)
+ (while (setq e (pop equations))
+ (setq lhs (car e) rhs (cdr e))
+ (cond
+ ((string-match "^@-?[-+I0-9]+\\$-?[0-9]+$" lhs)
+ ;; This just refers to one fixed field
+ (push e res))
+ ((string-match "^[a-zA-Z][a-zA-Z0-9]*$" lhs)
+ ;; This just refers to one fixed named field
+ (push e res))
+ ((string-match "^@[0-9]+$" lhs)
+ (loop for ic from 1 to org-table-current-ncol do
+ (push (cons (format "%s$%d" lhs ic) rhs) res)))
+ (t
+ (setq range (org-table-get-range lhs org-table-current-begin-pos
+ 1 nil 'corners))
+ (setq r1 (nth 0 range) c1 (nth 1 range)
+ r2 (nth 2 range) c2 (nth 3 range))
+ (setq r1 (org-table-line-to-dline r1))
+ (setq r2 (org-table-line-to-dline r2 'above))
+ (loop for ir from r1 to r2 do
+ (loop for ic from c1 to c2 do
+ (push (cons (format "@%d$%d" ir ic) rhs) res))))))
+ (nreverse res)))
+
(defun org-table-formula-substitute-names (f)
"Replace $const with values in string F."
(let ((start 0) a (f1 f) (pp (/= (string-to-char f) ?')))
@@ -2837,7 +2915,7 @@ Parameters get priority."
(wc (current-window-configuration))
(sel-win (selected-window))
(titles '((column . "# Column Formulas\n")
- (field . "# Field Formulas\n")
+ (field . "# Field and Range Formulas\n")
(named . "# Named Field Formulas\n")))
entry s type title)
(org-switch-to-buffer-other-window "*Edit Formulas*")
@@ -2861,7 +2939,7 @@ Parameters get priority."
(when (setq title (assq type titles))
(or (bobp) (insert "\n"))
(insert (org-add-props (cdr title) nil 'face font-lock-comment-face))
- (setq titles (delq title titles)))
+ (setq titles (remove title titles)))
(if (equal key (car entry)) (setq startline (org-current-line)))
(setq s (concat (if (equal (string-to-char (car entry)) ?@) "" "$")
(car entry) " = " (cdr entry) "\n"))
@@ -3078,7 +3156,7 @@ With prefix ARG, apply the new formulas to the table."
(let ((pos org-pos) (sel-win org-selected-window) eql var form)
(goto-char (point-min))
(while (re-search-forward
- "^\\(@[0-9]+\\$[0-9]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*\\(\n[ \t]+.*$\\)*\\)"
+ "^\\(@[^=\n \t]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*\\(\n[ \t]+.*$\\)*\\)"
nil t)
(setq var (if (match-end 2) (match-string 2) (match-string 1))
form (match-string 3))
@@ -3167,6 +3245,12 @@ With prefix ARG, apply the new formulas to the table."
var name e what match dest)
(if local (org-table-get-specials))
(setq what (cond
+ ((org-at-regexp-p "^@[0-9]+[ \t=]")
+ (setq match (concat (substring (match-string 0) 0 -1)
+ "$1.."
+ (substring (match-string 0) 0 -1)
+ "$100"))
+ 'range)
((or (org-at-regexp-p org-table-range-regexp2)
(org-at-regexp-p org-table-translate-regexp)
(org-at-regexp-p org-table-range-regexp))
@@ -4359,6 +4443,7 @@ list of the fields in the rectangle ."
org-table-local-parameters org-table-named-field-locations
org-table-current-line-types org-table-current-begin-line
org-table-current-begin-pos org-table-dlines
+ org-table-current-ncol
org-table-hlines org-table-last-alignment
org-table-last-column-widths org-table-last-alignment
org-table-last-column-widths tbeg
@@ -4402,3 +4487,4 @@ list of the fields in the rectangle ."
;; arch-tag: 4d21cfdd-0268-440a-84b0-09237a0fe0ef
;;; org-table.el ends here
+
--
1.7.1.575.gf526
[-- Attachment #3: Type: text/plain, Size: 201 bytes --]
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-01 14:28 Table rows and ranges as LHS of formulas Carsten Dominik
@ 2011-03-01 15:10 ` Carsten Dominik
2011-03-02 16:11 ` Christian Moe
2011-03-02 17:21 ` Bastien
2 siblings, 0 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-01 15:10 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode List
On Mar 1, 2011, at 3:28 PM, Carsten Dominik wrote:
> Hi everyone,
>
> A frequently requested feature for tables has been to
> be able to define row formulas in a way similar to column
> formulas. The patch below allows things like
>
> @3=
> @2$2..@5$7=
> @I$2..@II$4=
>
> as the left hand side for table formulas in order to
> write a formula that is valid for an entire column or
s/column/row/
> for a rectangular section in a table.
>
> Note that in contrast to column formulas, @3= will not
> automatically skip a "header column" or field formulas in the
> same row. In fact, making both a range formula and a field
> point to the same field is forbidden and throws an error.
> So to have a formula apply to all but the first column, use
> something like this:
>
> @3$2..@3$8=....
>
> Testing is welcome, but I am confident that this works
> pretty well.
>
> Bastien, please let me know if you want to have this integrated
> before the release, then I will do so.
>
> <0001-Implement-table-formulas-that-apply-to-field-ranges.patch>
- Carsten
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-01 14:28 Table rows and ranges as LHS of formulas Carsten Dominik
2011-03-01 15:10 ` Carsten Dominik
@ 2011-03-02 16:11 ` Christian Moe
2011-03-02 16:46 ` Bernt Hansen
2011-03-02 17:31 ` Carsten Dominik
2011-03-02 17:21 ` Bastien
2 siblings, 2 replies; 23+ messages in thread
From: Christian Moe @ 2011-03-02 16:11 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode List
Hi,
Row formulas are great! I've missed this, but learned to work around
it, since I I just assumed that if you hadn't already done it, it was
not a reasonable thing to ask for.
Testing... So now we can simply do e.g.:
#+CAPTION: A multiplication table
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|----+---+---+---+---+---+---+---+---+---+----|
| 1 | | | | | | | | | | |
| 2 | | | | | | | | | | |
| 3 | | | | | | | | | | |
| 4 | | | | | | | | | | |
| 5 | | | | | | | | | | |
| 6 | | | | | | | | | | |
| 7 | | | | | | | | | | |
| 8 | | | | | | | | | | |
| 9 | | | | | | | | | | |
| 10 | | | | | | | | | | |
#+TBLFM: @2$2..@11$11=@1*$1
C-c C-c...and hey presto:
#+CAPTION: A multiplication table
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|----+----+----+----+----+----+----+----+----+----+-----|
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
| 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
| 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
| 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
| 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
| 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
| 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
| 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
| 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
#+TBLFM: @2$2..@11$11=@1*$1
Yours,
Christian
On 3/1/11 3:28 PM, Carsten Dominik wrote:
> Hi everyone,
>
> A frequently requested feature for tables has been to
> be able to define row formulas in a way similar to column
> formulas. The patch below allows things like
>
> @3=
> @2$2..@5$7=
> @I$2..@II$4=
>
> as the left hand side for table formulas in order to
> write a formula that is valid for an entire column or
> for a rectangular section in a table.
>
> Note that in contrast to column formulas, @3= will not
> automatically skip a "header column" or field formulas in the
> same row. In fact, making both a range formula and a field
> point to the same field is forbidden and throws an error.
> So to have a formula apply to all but the first column, use
> something like this:
>
> @3$2..@3$8=....
>
> Testing is welcome, but I am confident that this works
> pretty well.
>
> Bastien, please let me know if you want to have this integrated
> before the release, then I will do so.
>
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 16:11 ` Christian Moe
@ 2011-03-02 16:46 ` Bernt Hansen
2011-03-02 17:31 ` Carsten Dominik
1 sibling, 0 replies; 23+ messages in thread
From: Bernt Hansen @ 2011-03-02 16:46 UTC (permalink / raw)
To: Carsten Dominik; +Cc: Bastien, emacs-orgmode List, mail
Hi Carsten,
This is really cool!
Thanks and Best Regards,
Bernt
Christian Moe <mail@christianmoe.com> writes:
> Hi,
>
> Row formulas are great! I've missed this, but learned to work around
> it, since I I just assumed that if you hadn't already done it, it was
> not a reasonable thing to ask for.
>
> Testing... So now we can simply do e.g.:
>
> #+CAPTION: A multiplication table
> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> |----+---+---+---+---+---+---+---+---+---+----|
> | 1 | | | | | | | | | | |
> | 2 | | | | | | | | | | |
> | 3 | | | | | | | | | | |
> | 4 | | | | | | | | | | |
> | 5 | | | | | | | | | | |
> | 6 | | | | | | | | | | |
> | 7 | | | | | | | | | | |
> | 8 | | | | | | | | | | |
> | 9 | | | | | | | | | | |
> | 10 | | | | | | | | | | |
> #+TBLFM: @2$2..@11$11=@1*$1
>
> C-c C-c...and hey presto:
>
> #+CAPTION: A multiplication table
> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> |----+----+----+----+----+----+----+----+----+----+-----|
> | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> | 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
> | 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
> | 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
> | 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
> | 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
> | 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
> | 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
> | 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
> | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
> #+TBLFM: @2$2..@11$11=@1*$1
>
>
> Yours,
> Christian
>
> On 3/1/11 3:28 PM, Carsten Dominik wrote:
>> Hi everyone,
>>
>> A frequently requested feature for tables has been to
>> be able to define row formulas in a way similar to column
>> formulas. The patch below allows things like
>>
>> @3=
>> @2$2..@5$7=
>> @I$2..@II$4=
>>
>> as the left hand side for table formulas in order to
>> write a formula that is valid for an entire column or
>> for a rectangular section in a table.
>>
>> Note that in contrast to column formulas, @3= will not
>> automatically skip a "header column" or field formulas in the
>> same row. In fact, making both a range formula and a field
>> point to the same field is forbidden and throws an error.
>> So to have a formula apply to all but the first column, use
>> something like this:
>>
>> @3$2..@3$8=....
>>
>> Testing is welcome, but I am confident that this works
>> pretty well.
>>
>> Bastien, please let me know if you want to have this integrated
>> before the release, then I will do so.
>>
>>
>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 16:11 ` Christian Moe
2011-03-02 16:46 ` Bernt Hansen
@ 2011-03-02 17:31 ` Carsten Dominik
2011-03-02 23:09 ` Christian Moe
1 sibling, 1 reply; 23+ messages in thread
From: Carsten Dominik @ 2011-03-02 17:31 UTC (permalink / raw)
To: mail; +Cc: emacs-orgmode List
Hi Christian,
thanks for the great example! I guess this is really something Org has over other spreadsheets. No copy-and-paste-with-modification, just a single formula.
- Carsten
On 2.3.2011, at 17:11, Christian Moe wrote:
> Hi,
>
> Row formulas are great! I've missed this, but learned to work around it, since I I just assumed that if you hadn't already done it, it was not a reasonable thing to ask for.
>
> Testing... So now we can simply do e.g.:
>
> #+CAPTION: A multiplication table
> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> |----+---+---+---+---+---+---+---+---+---+----|
> | 1 | | | | | | | | | | |
> | 2 | | | | | | | | | | |
> | 3 | | | | | | | | | | |
> | 4 | | | | | | | | | | |
> | 5 | | | | | | | | | | |
> | 6 | | | | | | | | | | |
> | 7 | | | | | | | | | | |
> | 8 | | | | | | | | | | |
> | 9 | | | | | | | | | | |
> | 10 | | | | | | | | | | |
> #+TBLFM: @2$2..@11$11=@1*$1
>
> C-c C-c...and hey presto:
>
> #+CAPTION: A multiplication table
> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> |----+----+----+----+----+----+----+----+----+----+-----|
> | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
> | 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
> | 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
> | 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
> | 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
> | 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
> | 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
> | 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
> | 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
> | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
> #+TBLFM: @2$2..@11$11=@1*$1
>
>
> Yours,
> Christian
>
> On 3/1/11 3:28 PM, Carsten Dominik wrote:
>> Hi everyone,
>>
>> A frequently requested feature for tables has been to
>> be able to define row formulas in a way similar to column
>> formulas. The patch below allows things like
>>
>> @3=
>> @2$2..@5$7=
>> @I$2..@II$4=
>>
>> as the left hand side for table formulas in order to
>> write a formula that is valid for an entire column or
>> for a rectangular section in a table.
>>
>> Note that in contrast to column formulas, @3= will not
>> automatically skip a "header column" or field formulas in the
>> same row. In fact, making both a range formula and a field
>> point to the same field is forbidden and throws an error.
>> So to have a formula apply to all but the first column, use
>> something like this:
>>
>> @3$2..@3$8=....
>>
>> Testing is welcome, but I am confident that this works
>> pretty well.
>>
>> Bastien, please let me know if you want to have this integrated
>> before the release, then I will do so.
>>
>>
>>
>>
>> _______________________________________________
>> Emacs-orgmode mailing list
>> Please use `Reply All' to send replies to the list.
>> Emacs-orgmode@gnu.org
>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 17:31 ` Carsten Dominik
@ 2011-03-02 23:09 ` Christian Moe
2011-03-02 23:16 ` Carsten Dominik
0 siblings, 1 reply; 23+ messages in thread
From: Christian Moe @ 2011-03-02 23:09 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode List
Hi, Carsten,
Yes, it's really neat.
I just realized, though, that there *is* an equally clean way to
generate such tables in OOo Calc (which the Org spreadsheet has all
but replaced for my needs):
- Place 1 in cell B1. Drag across to get 1-10 in cells B1:K1.
- Place 1 in cell A2. Drag down to get 1-10 in cells A2:A11.
- In cell B2, type the formula =B1:K1*A2:A11. Do NOT press Enter,
press Ctrl-Shift-Enter (or Cmd-Shift-Enter on Mac) to make it an
"array formula" (it presents as {=B1:K1*A2:A11}).
- Hey presto, the table is filled.
Yours,
Christian
On 3/2/11 6:31 PM, Carsten Dominik wrote:
> Hi Christian,
>
> thanks for the great example! I guess this is really something
> Org has over other spreadsheets. No copy-and-paste-with-modification,
> just a single formula.
>
> - Carsten
>
> On 2.3.2011, at 17:11, Christian Moe wrote:
>
>> Hi,
>>
>> Row formulas are great! I've missed this, but learned to work around it, since I I just assumed that if you hadn't already done it, it was not a reasonable thing to ask for.
>>
>> Testing... So now we can simply do e.g.:
>>
>> #+CAPTION: A multiplication table
>> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>> |----+---+---+---+---+---+---+---+---+---+----|
>> | 1 | | | | | | | | | | |
>> | 2 | | | | | | | | | | |
>> | 3 | | | | | | | | | | |
>> | 4 | | | | | | | | | | |
>> | 5 | | | | | | | | | | |
>> | 6 | | | | | | | | | | |
>> | 7 | | | | | | | | | | |
>> | 8 | | | | | | | | | | |
>> | 9 | | | | | | | | | | |
>> | 10 | | | | | | | | | | |
>> #+TBLFM: @2$2..@11$11=@1*$1
>>
>> C-c C-c...and hey presto:
>>
>> #+CAPTION: A multiplication table
>> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>> |----+----+----+----+----+----+----+----+----+----+-----|
>> | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>> | 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
>> | 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
>> | 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
>> | 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
>> | 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
>> | 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
>> | 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
>> | 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
>> | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
>> #+TBLFM: @2$2..@11$11=@1*$1
>>
>>
>> Yours,
>> Christian
>>
>> On 3/1/11 3:28 PM, Carsten Dominik wrote:
>>> Hi everyone,
>>>
>>> A frequently requested feature for tables has been to
>>> be able to define row formulas in a way similar to column
>>> formulas. The patch below allows things like
>>>
>>> @3=
>>> @2$2..@5$7=
>>> @I$2..@II$4=
>>>
>>> as the left hand side for table formulas in order to
>>> write a formula that is valid for an entire column or
>>> for a rectangular section in a table.
>>>
>>> Note that in contrast to column formulas, @3= will not
>>> automatically skip a "header column" or field formulas in the
>>> same row. In fact, making both a range formula and a field
>>> point to the same field is forbidden and throws an error.
>>> So to have a formula apply to all but the first column, use
>>> something like this:
>>>
>>> @3$2..@3$8=....
>>>
>>> Testing is welcome, but I am confident that this works
>>> pretty well.
>>>
>>> Bastien, please let me know if you want to have this integrated
>>> before the release, then I will do so.
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Emacs-orgmode mailing list
>>> Please use `Reply All' to send replies to the list.
>>> Emacs-orgmode@gnu.org
>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>
>
>
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 23:09 ` Christian Moe
@ 2011-03-02 23:16 ` Carsten Dominik
0 siblings, 0 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-02 23:16 UTC (permalink / raw)
To: mail; +Cc: emacs-orgmode List
On 3.3.2011, at 00:09, Christian Moe wrote:
> Hi, Carsten,
>
> Yes, it's really neat.
>
> I just realized, though, that there *is* an equally clean way to generate such tables in OOo Calc (which the Org spreadsheet has all but replaced for my needs):
>
> - Place 1 in cell B1. Drag across to get 1-10 in cells B1:K1.
> - Place 1 in cell A2. Drag down to get 1-10 in cells A2:A11.
> - In cell B2, type the formula =B1:K1*A2:A11. Do NOT press Enter, press Ctrl-Shift-Enter (or Cmd-Shift-Enter on Mac) to make it an "array formula" (it presents as {=B1:K1*A2:A11}).
> - Hey presto, the table is filled.
Indeed, this sounds equally compact. Thanks!
- Carsten
>
> Yours,
> Christian
>
>
> On 3/2/11 6:31 PM, Carsten Dominik wrote:
>> Hi Christian,
>>
>> thanks for the great example! I guess this is really something
>> Org has over other spreadsheets. No copy-and-paste-with-modification,
> > just a single formula.
>>
>> - Carsten
>>
>> On 2.3.2011, at 17:11, Christian Moe wrote:
>>
>>> Hi,
>>>
>>> Row formulas are great! I've missed this, but learned to work around it, since I I just assumed that if you hadn't already done it, it was not a reasonable thing to ask for.
>>>
>>> Testing... So now we can simply do e.g.:
>>>
>>> #+CAPTION: A multiplication table
>>> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>>> |----+---+---+---+---+---+---+---+---+---+----|
>>> | 1 | | | | | | | | | | |
>>> | 2 | | | | | | | | | | |
>>> | 3 | | | | | | | | | | |
>>> | 4 | | | | | | | | | | |
>>> | 5 | | | | | | | | | | |
>>> | 6 | | | | | | | | | | |
>>> | 7 | | | | | | | | | | |
>>> | 8 | | | | | | | | | | |
>>> | 9 | | | | | | | | | | |
>>> | 10 | | | | | | | | | | |
>>> #+TBLFM: @2$2..@11$11=@1*$1
>>>
>>> C-c C-c...and hey presto:
>>>
>>> #+CAPTION: A multiplication table
>>> | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>>> |----+----+----+----+----+----+----+----+----+----+-----|
>>> | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
>>> | 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
>>> | 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
>>> | 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
>>> | 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
>>> | 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
>>> | 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
>>> | 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
>>> | 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
>>> | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
>>> #+TBLFM: @2$2..@11$11=@1*$1
>>>
>>>
>>> Yours,
>>> Christian
>>>
>>> On 3/1/11 3:28 PM, Carsten Dominik wrote:
>>>> Hi everyone,
>>>>
>>>> A frequently requested feature for tables has been to
>>>> be able to define row formulas in a way similar to column
>>>> formulas. The patch below allows things like
>>>>
>>>> @3=
>>>> @2$2..@5$7=
>>>> @I$2..@II$4=
>>>>
>>>> as the left hand side for table formulas in order to
>>>> write a formula that is valid for an entire column or
>>>> for a rectangular section in a table.
>>>>
>>>> Note that in contrast to column formulas, @3= will not
>>>> automatically skip a "header column" or field formulas in the
>>>> same row. In fact, making both a range formula and a field
>>>> point to the same field is forbidden and throws an error.
>>>> So to have a formula apply to all but the first column, use
>>>> something like this:
>>>>
>>>> @3$2..@3$8=....
>>>>
>>>> Testing is welcome, but I am confident that this works
>>>> pretty well.
>>>>
>>>> Bastien, please let me know if you want to have this integrated
>>>> before the release, then I will do so.
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Emacs-orgmode mailing list
>>>> Please use `Reply All' to send replies to the list.
>>>> Emacs-orgmode@gnu.org
>>>> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>>>
>>
>>
>
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-01 14:28 Table rows and ranges as LHS of formulas Carsten Dominik
2011-03-01 15:10 ` Carsten Dominik
2011-03-02 16:11 ` Christian Moe
@ 2011-03-02 17:21 ` Bastien
2011-03-02 17:35 ` Carsten Dominik
2 siblings, 1 reply; 23+ messages in thread
From: Bastien @ 2011-03-02 17:21 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode List
Hi Carsten,
Carsten Dominik <carsten.dominik@gmail.com> writes:
> Bastien, please let me know if you want to have this integrated
> before the release, then I will do so.
Please go ahead! This looks like a nice addition, thanks for that.
--
Bastien
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 17:21 ` Bastien
@ 2011-03-02 17:35 ` Carsten Dominik
2011-03-02 18:54 ` Nick Dokos
0 siblings, 1 reply; 23+ messages in thread
From: Carsten Dominik @ 2011-03-02 17:35 UTC (permalink / raw)
To: Bastien; +Cc: emacs-orgmode List
On 2.3.2011, at 18:21, Bastien wrote:
> Hi Carsten,
>
> Carsten Dominik <carsten.dominik@gmail.com> writes:
>
>> Bastien, please let me know if you want to have this integrated
>> before the release, then I will do so.
>
> Please go ahead! This looks like a nice addition, thanks for that.
I just pushed it. The patch I pushed contains another small thing:
you can use @L to mean the last row. So
@L=vsum(@I..II)
is now a great way to sum columns in the last row.
To skip the First column (in case it contains unsummable
labels or so, use
@L$2..@L@8=vsum(@I..II)
- Carsten
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 17:35 ` Carsten Dominik
@ 2011-03-02 18:54 ` Nick Dokos
2011-03-02 20:00 ` Suvayu Ali
2011-03-02 22:57 ` Carsten Dominik
0 siblings, 2 replies; 23+ messages in thread
From: Nick Dokos @ 2011-03-02 18:54 UTC (permalink / raw)
To: Carsten Dominik; +Cc: Bastien, nicholas.dokos, emacs-orgmode List
Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
> On 2.3.2011, at 18:21, Bastien wrote:
>
> > Hi Carsten,
> >
> > Carsten Dominik <carsten.dominik@gmail.com> writes:
> >
> >> Bastien, please let me know if you want to have this integrated
> >> before the release, then I will do so.
> >
> > Please go ahead! This looks like a nice addition, thanks for that.
>
> I just pushed it. The patch I pushed contains another small thing:
> you can use @L to mean the last row. So
>
> @L=vsum(@I..II)
>
> is now a great way to sum columns in the last row.
> To skip the First column (in case it contains unsummable
> labels or so, use
>
> @L$2..@L@8=vsum(@I..II)
>
Both of these and Christian's multiplication table are great
examples. Thanks!
One nit: symmetry dictates that $L should be the last column, but it
isn't. Trying @2$2..@L$11 in Christian's example works fine, but
@2$2..@L$L changes the first column to all zeroes (not sure why).
Thanks,
Nick
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 18:54 ` Nick Dokos
@ 2011-03-02 20:00 ` Suvayu Ali
2011-03-02 22:57 ` Carsten Dominik
1 sibling, 0 replies; 23+ messages in thread
From: Suvayu Ali @ 2011-03-02 20:00 UTC (permalink / raw)
To: nicholas.dokos; +Cc: emacs-orgmode List
Hi Nick,
On Wed, 02 Mar 2011 13:54:09 -0500
Nick Dokos <nicholas.dokos@hp.com> wrote:
> One nit: symmetry dictates that $L should be the last column, but it
> isn't. Trying @2$2..@L$11 in Christian's example works fine, but
> @2$2..@L$L changes the first column to all zeroes (not sure why).
I can't find a reference to any such feature in the manual. Maybe its a
worth while feature request?
--
Suvayu
Open source is the future. It sets us free.
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 18:54 ` Nick Dokos
2011-03-02 20:00 ` Suvayu Ali
@ 2011-03-02 22:57 ` Carsten Dominik
2011-03-02 23:08 ` Samuel Wales
2011-03-03 4:18 ` Nick Dokos
1 sibling, 2 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-02 22:57 UTC (permalink / raw)
To: nicholas.dokos; +Cc: Bastien, emacs-orgmode List
On 2.3.2011, at 19:54, Nick Dokos wrote:
> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
>>
>> On 2.3.2011, at 18:21, Bastien wrote:
>>
>>> Hi Carsten,
>>>
>>> Carsten Dominik <carsten.dominik@gmail.com> writes:
>>>
>>>> Bastien, please let me know if you want to have this integrated
>>>> before the release, then I will do so.
>>>
>>> Please go ahead! This looks like a nice addition, thanks for that.
>>
>> I just pushed it. The patch I pushed contains another small thing:
>> you can use @L to mean the last row. So
>>
>> @L=vsum(@I..II)
>>
>> is now a great way to sum columns in the last row.
>> To skip the First column (in case it contains unsummable
>> labels or so, use
>>
>> @L$2..@L@8=vsum(@I..II)
>>
>
> Both of these and Christian's multiplication table are great
> examples. Thanks!
>
> One nit: symmetry dictates that $L should be the last column, but it
> isn't. Trying @2$2..@L$11 in Christian's example works fine, but
> @2$2..@L$L changes the first column to all zeroes (not sure why).
Yes, of cause, this symmetry would be nice, I have thought about it.
However, $L is ambiguous syntax, there can be a name that is $L, so
this might even break existing tables. I could do is so that if
there is no name $L defined, then use it. But this is also
confusing, and of cause not stable if someone does define new names.
Maybe we should use something else to achieve symmetry, like @> and $>.
Comments?
- Carsten
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 22:57 ` Carsten Dominik
@ 2011-03-02 23:08 ` Samuel Wales
2011-03-03 4:18 ` Nick Dokos
1 sibling, 0 replies; 23+ messages in thread
From: Samuel Wales @ 2011-03-02 23:08 UTC (permalink / raw)
To: Carsten Dominik; +Cc: Bastien, nicholas.dokos, emacs-orgmode List
On 2011-03-02, Carsten Dominik <carsten.dominik@gmail.com> wrote:
> Maybe we should use something else to achieve symmetry, like @> and $>.
Dunno if this comment helps, but I like predictable behavior, so that
should work.
--
The Kafka Pandemic:
http://thekafkapandemic.blogspot.com/2010/12/welcome-to-kafka-pandemic-two-forces_9182.html
I support the Whittemore-Peterson Institute (WPI)
===
I want to see the original (pre-hold) Lo et al. 2010 NIH/FDA/Harvard MLV paper.
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-02 22:57 ` Carsten Dominik
2011-03-02 23:08 ` Samuel Wales
@ 2011-03-03 4:18 ` Nick Dokos
2011-03-03 8:28 ` Bastien
` (2 more replies)
1 sibling, 3 replies; 23+ messages in thread
From: Nick Dokos @ 2011-03-03 4:18 UTC (permalink / raw)
To: Carsten Dominik; +Cc: Bastien, nicholas.dokos, emacs-orgmode List
Carsten Dominik <carsten.dominik@gmail.com> wrote:
> Maybe we should use something else to achieve symmetry, like @> and $>.
>
> Comments?
>
Perfect. Mirrors the keybinding for end-of-buffer, so there is mnemonic
value there, and it naturally flows from the @N$N notation.
Something else that popped into my head: are there any plans to
deprecate the $LR2 notation? I always had trouble remembering how that
went, so having @>$2 in its place works much better for me.[fn:1]
Nick
Footnotes:
[fn:1] Of course, it starts looking a bit like Perl :-)
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 4:18 ` Nick Dokos
@ 2011-03-03 8:28 ` Bastien
2011-03-03 12:23 ` Carsten Dominik
2011-03-03 12:23 ` Carsten Dominik
2011-03-03 21:19 ` Carsten Dominik
2 siblings, 1 reply; 23+ messages in thread
From: Bastien @ 2011-03-03 8:28 UTC (permalink / raw)
To: nicholas.dokos; +Cc: emacs-orgmode List, Carsten Dominik
Nick Dokos <nicholas.dokos@hp.com> writes:
> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
>> Maybe we should use something else to achieve symmetry, like @> and $>.
>>
>> Comments?
>>
>
> Perfect. Mirrors the keybinding for end-of-buffer, so there is mnemonic
> value there, and it naturally flows from the @N$N notation.
FWIW I also find @> and $> to be better than @L and $L.
--
Bastien
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 8:28 ` Bastien
@ 2011-03-03 12:23 ` Carsten Dominik
2011-03-03 16:46 ` Bastien
0 siblings, 1 reply; 23+ messages in thread
From: Carsten Dominik @ 2011-03-03 12:23 UTC (permalink / raw)
To: Bastien; +Cc: nicholas.dokos, emacs-orgmode List
On 3.3.2011, at 09:28, Bastien wrote:
> Nick Dokos <nicholas.dokos@hp.com> writes:
>
>> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>>
>>> Maybe we should use something else to achieve symmetry, like @> and $>.
>>>
>>> Comments?
>>>
>>
>> Perfect. Mirrors the keybinding for end-of-buffer, so there is mnemonic
>> value there, and it naturally flows from the @N$N notation.
>
> FWIW I also find @> and $> to be better than @L and $L.
OK, I will include this change into my next patch.
- Carsten
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 4:18 ` Nick Dokos
2011-03-03 8:28 ` Bastien
@ 2011-03-03 12:23 ` Carsten Dominik
2011-03-03 21:19 ` Carsten Dominik
2 siblings, 0 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-03 12:23 UTC (permalink / raw)
To: nicholas.dokos; +Cc: Bastien, emacs-orgmode List
On 3.3.2011, at 05:18, Nick Dokos wrote:
> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
>> Maybe we should use something else to achieve symmetry, like @> and $>.
>>
>> Comments?
>>
>
> Perfect. Mirrors the keybinding for end-of-buffer, so there is mnemonic
> value there, and it naturally flows from the @N$N notation.
OK, I'll try to work on this.
> Something else that popped into my head: are there any plans to
> deprecate the $LR2 notation? I always had trouble remembering how that
> went, so having @>$2 in its place works much better for me.[fn:1]
I think so too, and the patch yesterday already marked this feature
as deprecated and moved the documentation about $LR2 into a footnote.
We should not remove this for backward compatibility - but there
is no reason to use this syntax anymore.
>
> Nick
>
> Footnotes:
> [fn:1] Of course, it starts looking a bit like Perl :-)
Indeed :/
- Carsten
--
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 4:18 ` Nick Dokos
2011-03-03 8:28 ` Bastien
2011-03-03 12:23 ` Carsten Dominik
@ 2011-03-03 21:19 ` Carsten Dominik
2011-03-03 22:01 ` Suvayu Ali
2 siblings, 1 reply; 23+ messages in thread
From: Carsten Dominik @ 2011-03-03 21:19 UTC (permalink / raw)
To: nicholas.dokos; +Cc: Bastien, emacs-orgmode List
On 3.3.2011, at 05:18, Nick Dokos wrote:
> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
>> Maybe we should use something else to achieve symmetry, like @> and $>.
>>
>> Comments?
>>
>
> Perfect. Mirrors the keybinding for end-of-buffer, so there is mnemonic
> value there, and it naturally flows from the @N$N notation.
OK, this is how it works now. @L no longer works.
Regards
- Carsten
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 21:19 ` Carsten Dominik
@ 2011-03-03 22:01 ` Suvayu Ali
2011-03-03 22:11 ` Nick Dokos
0 siblings, 1 reply; 23+ messages in thread
From: Suvayu Ali @ 2011-03-03 22:01 UTC (permalink / raw)
To: Carsten Dominik; +Cc: emacs-orgmode List
Hi,
On Thu, 3 Mar 2011 22:19:32 +0100
Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
> On 3.3.2011, at 05:18, Nick Dokos wrote:
>
> > Carsten Dominik <carsten.dominik@gmail.com> wrote:
> >
> >> Maybe we should use something else to achieve symmetry, like @>
> >> and $>.
> >>
> >> Comments?
> >>
> >
> > Perfect. Mirrors the keybinding for end-of-buffer, so there is
> > mnemonic value there, and it naturally flows from the @N$N notation.
>
> OK, this is how it works now. @L no longer works.
>
I updated org just now. But when I try this,
| Expense | Amount (CAD) |
|----------+--------------|
| Tickets | 1191.82 |
| hostel | 838.49 |
| per diem | 1050.00 |
|----------+--------------|
| Total | |
#+TBLFM: @>$>=vsum(@I..@II);%.2f
It doesn't work. Whereas this does:
| Expense | Amount (CAD) |
|----------+--------------|
| Tickets | 1191.82 |
| hostel | 838.49 |
| per diem | 1050.00 |
|----------+--------------|
| Total | 3080.31 |
#+TBLFM: @5$2=vsum(@I..@II);%.2f
Am I doing something wrong?
> Regards
>
> - Carsten
>
>
Thanks,
--
Suvayu
Open source is the future. It sets us free.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 22:01 ` Suvayu Ali
@ 2011-03-03 22:11 ` Nick Dokos
2011-03-03 22:25 ` Suvayu Ali
2011-03-04 5:41 ` Carsten Dominik
0 siblings, 2 replies; 23+ messages in thread
From: Nick Dokos @ 2011-03-03 22:11 UTC (permalink / raw)
To: Suvayu Ali; +Cc: nicholas.dokos, emacs-orgmode List, Carsten Dominik
Suvayu Ali <fatkasuvayu+linux@gmail.com> wrote:
> Hi,
>
> On Thu, 3 Mar 2011 22:19:32 +0100
> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>
> >
> > On 3.3.2011, at 05:18, Nick Dokos wrote:
> >
> > > Carsten Dominik <carsten.dominik@gmail.com> wrote:
> > >
> > >> Maybe we should use something else to achieve symmetry, like @>
> > >> and $>.
> > >>
> > >> Comments?
> > >>
> > >
> > > Perfect. Mirrors the keybinding for end-of-buffer, so there is
> > > mnemonic value there, and it naturally flows from the @N$N notation.
> >
> > OK, this is how it works now. @L no longer works.
> >
>
> I updated org just now. But when I try this,
>
> | Expense | Amount (CAD) |
> |----------+--------------|
> | Tickets | 1191.82 |
> | hostel | 838.49 |
> | per diem | 1050.00 |
> |----------+--------------|
> | Total | |
> #+TBLFM: @>$>=vsum(@I..@II);%.2f
>
> It doesn't work. Whereas this does:
>
> | Expense | Amount (CAD) |
> |----------+--------------|
> | Tickets | 1191.82 |
> | hostel | 838.49 |
> | per diem | 1050.00 |
> |----------+--------------|
> | Total | 3080.31 |
> #+TBLFM: @5$2=vsum(@I..@II);%.2f
>
> Am I doing something wrong?
>
I don't think so: I don't see Carsten's change even though I just pulled, so
I guess he has not pushed it yet (or forgot to):
,----
| $ git log -3 lisp/org-table.el
| commit dc60852d24b16555466214712181351e11b68e7c
| Author: Bastien Guerry <bzg@altern.org>
| Date: Thu Mar 3 09:34:34 2011 +0100
|
| Fix small typo in docstring.
|
| commit 8892fe3f0404dd608452dd8203f2783a212e8120
| Author: Bastien Guerry <bzg@altern.org>
| Date: Thu Mar 3 09:30:16 2011 +0100
|
| Fix small typo in docstring.
|
| commit 8237c9ae6d587a22646333e0315683675e2db538
| Author: Carsten Dominik <carsten.dominik@gmail.com>
| Date: Tue Mar 1 09:05:56 2011 +0100
|
| Implement table formulas that apply to field ranges, fix minor issues
|
| * lisp/org-table.el (org-table-fedit-finish): Read more general LHS of formulas.
| (org-table-formula-handle-@L): New function to hanle @L references.
| (org-table-current-ncol): New variable.
| (org-table-line-to-dline): New function.
| (org-table-get-stored-formulas): Accept range formulas as matches.
| (org-table-get-specials): Compute and store the number of columns.
| (org-table-get-range): New optional argument CORNERS-ONLY, to retrieve
| only the region marked by the range, not the content.
| (org-table-recalculate): Call `org-table-expand-lhs-ranges' to expand
| range targets. Also check for duplicate access to fields.
| (org-table-expand-lhs-ranges): New funktion.
| (org-table-get-remote-range): Bind `org-table-current-ncol' to protect
| the caller's value.
| (org-table-edit-formulas): Support highlighting of range targets.
| (org-table-field-info): Handle renge formulas.
|
| * doc/org.texi (Field and range formulas): Renamed from "Field formulas".
| Document the use of range operators as targets.
| (References): Document the new @L reference.
`----
Nick
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 22:11 ` Nick Dokos
@ 2011-03-03 22:25 ` Suvayu Ali
2011-03-04 5:41 ` Carsten Dominik
1 sibling, 0 replies; 23+ messages in thread
From: Suvayu Ali @ 2011-03-03 22:25 UTC (permalink / raw)
To: nicholas.dokos; +Cc: emacs-orgmode List, Carsten Dominik
Hi Nick,
On Thu, 03 Mar 2011 17:11:00 -0500
Nick Dokos <nicholas.dokos@hp.com> wrote:
> > #+TBLFM: @>$>=vsum(@I..@II);%.2f
> >
> > It doesn't work. Whereas this does:
> >
> > ...
> >
> > #+TBLFM: @5$2=vsum(@I..@II);%.2f
> >
> > Am I doing something wrong?
> >
>
> I don't think so: I don't see Carsten's change even though I just
> pulled, so I guess he has not pushed it yet (or forgot to):
>
> ...
>
> commit 8237c9ae6d587a22646333e0315683675e2db538
> Author: Carsten Dominik <carsten.dominik@gmail.com>
> Date: Tue Mar 1 09:05:56 2011 +0100
>
> Implement table formulas that apply to field ranges, fix minor issues
>
> * lisp/org-table.el (org-table-fedit-finish): Read more general LHS of formulas.
> (org-table-formula-handle-@L): New function to hanle @L references.
When I looked at this commit message earlier, I think I misunderstood
it. I think you are correct, it hasn't been pushed yet. :)
Thanks,
--
Suvayu
Open source is the future. It sets us free.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Table rows and ranges as LHS of formulas
2011-03-03 22:11 ` Nick Dokos
2011-03-03 22:25 ` Suvayu Ali
@ 2011-03-04 5:41 ` Carsten Dominik
1 sibling, 0 replies; 23+ messages in thread
From: Carsten Dominik @ 2011-03-04 5:41 UTC (permalink / raw)
To: nicholas.dokos; +Cc: emacs-orgmode List
On 3.3.2011, at 23:11, Nick Dokos wrote:
> Suvayu Ali <fatkasuvayu+linux@gmail.com> wrote:
>
>> Hi,
>>
>> On Thu, 3 Mar 2011 22:19:32 +0100
>> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>>
>>>
>>> On 3.3.2011, at 05:18, Nick Dokos wrote:
>>>
>>>> Carsten Dominik <carsten.dominik@gmail.com> wrote:
>>>>
>>>>> Maybe we should use something else to achieve symmetry, like @>
>>>>> and $>.
>>>>>
>>>>> Comments?
>>>>>
>>>>
>>>> Perfect. Mirrors the keybinding for end-of-buffer, so there is
>>>> mnemonic value there, and it naturally flows from the @N$N notation.
>>>
>>> OK, this is how it works now. @L no longer works.
>>>
>>
>> I updated org just now. But when I try this,
>>
>> | Expense | Amount (CAD) |
>> |----------+--------------|
>> | Tickets | 1191.82 |
>> | hostel | 838.49 |
>> | per diem | 1050.00 |
>> |----------+--------------|
>> | Total | |
>> #+TBLFM: @>$>=vsum(@I..@II);%.2f
>>
>> It doesn't work. Whereas this does:
>>
>> | Expense | Amount (CAD) |
>> |----------+--------------|
>> | Tickets | 1191.82 |
>> | hostel | 838.49 |
>> | per diem | 1050.00 |
>> |----------+--------------|
>> | Total | 3080.31 |
>> #+TBLFM: @5$2=vsum(@I..@II);%.2f
>>
>> Am I doing something wrong?
>>
>
> I don't think so: I don't see Carsten's change even though I just pulled, so
> I guess he has not pushed it yet (or forgot to):
Hmm, indeed, seems like I forgot to push. Did that just now,
and tested Suvayu's example.
- Carsten
>
> ,----
> | $ git log -3 lisp/org-table.el
> | commit dc60852d24b16555466214712181351e11b68e7c
> | Author: Bastien Guerry <bzg@altern.org>
> | Date: Thu Mar 3 09:34:34 2011 +0100
> |
> | Fix small typo in docstring.
> |
> | commit 8892fe3f0404dd608452dd8203f2783a212e8120
> | Author: Bastien Guerry <bzg@altern.org>
> | Date: Thu Mar 3 09:30:16 2011 +0100
> |
> | Fix small typo in docstring.
> |
> | commit 8237c9ae6d587a22646333e0315683675e2db538
> | Author: Carsten Dominik <carsten.dominik@gmail.com>
> | Date: Tue Mar 1 09:05:56 2011 +0100
> |
> | Implement table formulas that apply to field ranges, fix minor issues
> |
> | * lisp/org-table.el (org-table-fedit-finish): Read more general LHS of formulas.
> | (org-table-formula-handle-@L): New function to hanle @L references.
> | (org-table-current-ncol): New variable.
> | (org-table-line-to-dline): New function.
> | (org-table-get-stored-formulas): Accept range formulas as matches.
> | (org-table-get-specials): Compute and store the number of columns.
> | (org-table-get-range): New optional argument CORNERS-ONLY, to retrieve
> | only the region marked by the range, not the content.
> | (org-table-recalculate): Call `org-table-expand-lhs-ranges' to expand
> | range targets. Also check for duplicate access to fields.
> | (org-table-expand-lhs-ranges): New funktion.
> | (org-table-get-remote-range): Bind `org-table-current-ncol' to protect
> | the caller's value.
> | (org-table-edit-formulas): Support highlighting of range targets.
> | (org-table-field-info): Handle renge formulas.
> |
> | * doc/org.texi (Field and range formulas): Renamed from "Field formulas".
> | Document the use of range operators as targets.
> | (References): Document the new @L reference.
> `----
>
> Nick
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2011-03-04 5:41 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-01 14:28 Table rows and ranges as LHS of formulas Carsten Dominik
2011-03-01 15:10 ` Carsten Dominik
2011-03-02 16:11 ` Christian Moe
2011-03-02 16:46 ` Bernt Hansen
2011-03-02 17:31 ` Carsten Dominik
2011-03-02 23:09 ` Christian Moe
2011-03-02 23:16 ` Carsten Dominik
2011-03-02 17:21 ` Bastien
2011-03-02 17:35 ` Carsten Dominik
2011-03-02 18:54 ` Nick Dokos
2011-03-02 20:00 ` Suvayu Ali
2011-03-02 22:57 ` Carsten Dominik
2011-03-02 23:08 ` Samuel Wales
2011-03-03 4:18 ` Nick Dokos
2011-03-03 8:28 ` Bastien
2011-03-03 12:23 ` Carsten Dominik
2011-03-03 16:46 ` Bastien
2011-03-03 12:23 ` Carsten Dominik
2011-03-03 21:19 ` Carsten Dominik
2011-03-03 22:01 ` Suvayu Ali
2011-03-03 22:11 ` Nick Dokos
2011-03-03 22:25 ` Suvayu Ali
2011-03-04 5:41 ` Carsten Dominik
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).