瀏覽代碼

Release 4.65

Carsten Dominik 18 年之前
父節點
當前提交
5e48ea5630
共有 6 個文件被更改,包括 1236 次插入304 次删除
  1. 483 216
      org
  2. 478 67
      org.el
  3. 二進制
      org.pdf
  4. 274 20
      org.texi
  5. 二進制
      orgcard.pdf
  6. 1 1
      orgcard.tex

+ 483 - 216
org

@@ -5,7 +5,7 @@ START-INFO-DIR-ENTRY
 * Org Mode: (org).      Outline-based notes management and organizer
 * Org Mode: (org).      Outline-based notes management and organizer
 END-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 
-   This manual is for Org-mode (version 4.64).
+   This manual is for Org-mode (version 4.65).
 
 
    Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
    Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
 
 
@@ -27,7 +27,7 @@ File: org,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
 Org Mode Manual
 Org Mode Manual
 ***************
 ***************
 
 
-This manual is for Org-mode (version 4.64).
+This manual is for Org-mode (version 4.65).
 
 
    Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
    Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation
 
 
@@ -265,8 +265,15 @@ Interaction with other packages
 Extensions, Hooks and Hacking
 Extensions, Hooks and Hacking
 
 
 * Extensions::                  Existing 3rd-part extensions
 * Extensions::                  Existing 3rd-part extensions
+* Tables in arbitrary syntax::  Orgtbl for LaTeX and other programs
 * Dynamic blocks::              Automatically filled blocks
 * Dynamic blocks::              Automatically filled blocks
-* Special agenda views::
+* Special agenda views::        Customized views
+
+Tables in arbitrary syntax
+
+* Radio tables::                Sending and receiving
+* A LaTeX example::             Step by step, almost a tutorial
+* Translator functions::        Copy and modify
 
 
 
 
 File: org,  Node: Introduction,  Next: Document structure,  Prev: Top,  Up: Top
 File: org,  Node: Introduction,  Next: Document structure,  Prev: Top,  Up: Top
@@ -331,7 +338,8 @@ example as:
 
 
    Org-mode's automatic, context sensitive table editor with spreadsheet
    Org-mode's automatic, context sensitive table editor with spreadsheet
 capabilities can be integrated into any major mode by activating the
 capabilities can be integrated into any major mode by activating the
-minor Orgtbl-mode.
+minor Orgtbl-mode.  Using a translation step, it can be used to maintain
+tables in arbitray file types, for example in LaTeX.
 
 
    There is a website for Org-mode which provides links to the newest
    There is a website for Org-mode which provides links to the newest
 version of Org-mode, as well as additional information, frequently asked
 version of Org-mode, as well as additional information, frequently asked
@@ -1193,6 +1201,12 @@ in mail mode, use
 
 
      (add-hook 'mail-mode-hook 'turn-on-orgtbl)
      (add-hook 'mail-mode-hook 'turn-on-orgtbl)
 
 
+   Furthermore, with some special setup, it is possible to maintain
+tables in arbitrary syntax with Orgtbl-mode.  For example, it is
+possible to construct LaTeX tables with the underlying ease and power of
+Orgtbl-mode, including spreadsheet capabulities.  For details, see
+*Note Tables in arbitrary syntax::.
+
 
 
 File: org,  Node: The spreadsheet,  Prev: orgtbl-mode,  Up: Tables
 File: org,  Node: The spreadsheet,  Prev: orgtbl-mode,  Up: Tables
 
 
@@ -1458,6 +1472,16 @@ formulas of a table.
     `C-c C-q'
     `C-c C-q'
           Exit the buffer without installing changes.  
           Exit the buffer without installing changes.  
 
 
+    `<TAB>'
+          Pretty-print or indent lisp formula at point.  When in a line
+          containing a lisp formula, format the formula according to
+          Emacs Lisp rules.  Another <TAB> collapses the formula back
+          again.  In the open formula, <TAB> re-indents just like in
+          Emacs-lisp-mode.  
+
+    `M-<TAB>'
+          Complete Lisp symbols, just like in Emacs-lisp-mode.  
+
     `S-<up>/<down>'
     `S-<up>/<down>'
           Move the reference line in the Org-mode buffer up and down.
           Move the reference line in the Org-mode buffer up and down.
           This is important for highlighting the references of column
           This is important for highlighting the references of column
@@ -1593,6 +1617,10 @@ column formulas are not applied in rows with empty first field.
      All lines that should be recalculated should be marked with `#' or
      All lines that should be recalculated should be marked with `#' or
      `*'.
      `*'.
 
 
+`/'
+     Do not export this line.  Useful for lines that contain the
+     narrowing `<N>' markers.
+
    Finally, just to whet your appetite on what can be done with the
    Finally, just to whet your appetite on what can be done with the
 fantastic `calc' package, here is a table that computes the Taylor
 fantastic `calc' package, here is a table that computes the Taylor
 series of degree `n' at location `x' for a couple of functions
 series of degree `n' at location `x' for a couple of functions
@@ -5413,11 +5441,12 @@ Org-mode.
 * Menu:
 * Menu:
 
 
 * Extensions::                  Existing 3rd-part extensions
 * Extensions::                  Existing 3rd-part extensions
+* Tables in arbitrary syntax::  Orgtbl for LaTeX and other programs
 * Dynamic blocks::              Automatically filled blocks
 * Dynamic blocks::              Automatically filled blocks
-* Special agenda views::
+* Special agenda views::        Customized views
 
 
 
 
-File: org,  Node: Extensions,  Next: Dynamic blocks,  Prev: Extensions and Hacking,  Up: Extensions and Hacking
+File: org,  Node: Extensions,  Next: Tables in arbitrary syntax,  Prev: Extensions and Hacking,  Up: Extensions and Hacking
 
 
 A.1 Third-party extensions for Org-mode
 A.1 Third-party extensions for Org-mode
 =======================================
 =======================================
@@ -5426,14 +5455,13 @@ The following extensions for Org-mode have been written by other people:
 
 
 `org-publish.el' by David O'Toole
 `org-publish.el' by David O'Toole
      This package provides facilities for publishing related sets of
      This package provides facilities for publishing related sets of
-     Org-mode files together with linked files like images as a
-     webpages.  It is highly configurable and can be used for other
-     publishing purposes as well.  As of Org-mode version 4.30,
-     `org-publish.el' is part of the Org-mode distribution.  It is not
-     yet part of Emacs, however, a delay caused by the preparations for
-     the 22.1 release.  In the mean time, `org-publish.el' can be
-     downloaded from David's site:
-     `http://dto.freeshell.org/e/org-publish.el'.  
+     Org-mode files together with linked files like images as webpages.
+     It is highly configurable and can be used for other publishing
+     purposes as well.  As of Org-mode version 4.30, `org-publish.el'
+     is part of the Org-mode distribution.  It is not yet part of
+     Emacs, however, a delay caused by the preparations for the 22.1
+     release.  In the mean time, `org-publish.el' can be downloaded
+     from David's site: `http://dto.freeshell.org/e/org-publish.el'.  
 
 
 `org-mouse.el' by Piotr Zielinski
 `org-mouse.el' by Piotr Zielinski
      This package implements extended mouse functionality for Org-mode.
      This package implements extended mouse functionality for Org-mode.
@@ -5460,9 +5488,219 @@ The following extensions for Org-mode have been written by other people:
      `http://www.cognition.ens.fr/~guerry/u/org2rem.el'.
      `http://www.cognition.ens.fr/~guerry/u/org2rem.el'.
 
 
 
 
-File: org,  Node: Dynamic blocks,  Next: Special agenda views,  Prev: Extensions,  Up: Extensions and Hacking
+File: org,  Node: Tables in arbitrary syntax,  Next: Dynamic blocks,  Prev: Extensions,  Up: Extensions and Hacking
+
+A.2 Tables in arbitrary syntax
+==============================
+
+Since Orgtbl-mode can be used as a minor mode in arbitrary buffers, a
+frequent feature request has been to make it work with native tables in
+specific languages, for example LaTeX.  However, this is extremely hard
+to do in a general way, would lead to a customization nightmare, and
+would take away much of the simplicity of the Orgtbl-mode table editor.
+
+   This appendix describes different approach.  We keep the Orgtbl-mode
+table in its native format (the source table), and use a custom
+function to translate the table to the correct syntax, and to install
+it in the right location (the target table).  This puts the burden of
+writing conversion functions on the user, but it allows for a very
+flexible system.
+
+* Menu:
 
 
-A.2 Dynamic blocks
+* Radio tables::                Sending and receiving
+* A LaTeX example::             Step by step, almost a tutorial
+* Translator functions::        Copy and modify
+
+
+File: org,  Node: Radio tables,  Next: A LaTeX example,  Prev: Tables in arbitrary syntax,  Up: Tables in arbitrary syntax
+
+A.2.1 Radio tables
+------------------
+
+To define the location of the target table, you first need to create two
+lines that are comments in the current mode, but contain magic words for
+Orgtbl-mode to find.  Orgtbl-mode will insert the translated table
+between these lines, replacing whatever was there before.  For example:
+
+     /* BEGIN RECEIVE ORGTBL table_name */
+     /* END RECEIVE ORGTBL table_name */
+
+Just above the source table, we put a special line that tells
+Orgtbl-mode how to translate this table and where to install it.  For
+example:
+     #+ORGTBL: SEND table_name translation_function arguments....
+
+`table_name' is the reference name for the table that is also used in
+the receiver lines. `translation_function' is the Lisp function that
+does the translation.  Furthermore, the line can contain a list of
+arguments (alternating key and value) at the end.  The arguments will be
+passed as a property list to the translation function for
+interpretation.  However, a few standard parameters are already
+recognized and acted upon before the translation function is called:
+
+`:skip N'
+     Skip the first N lines of the table. Hlines do count!
+
+`:skipcols (n1 n2 ...)'
+     List of columns that should be skipped.  If the table has a column
+     with calculation marks, that column is automatically discarded as
+     well.  Please note that the translator function sees the table
+     _after_ the removal of these columns, the function never knows
+     that there have been additional columns.
+
+The one problem remaining is how to keep the source table in the buffer
+without disturbing the normal workings of the file, for example during
+compilation of a C file or processing of a LaTeX file.  There are a
+number of different solutions:
+
+   * The table could be placed in a block comment if that is supported
+     by the language.  For example, in C-mode you could wrap the table
+     between `/*' and `*/' lines.
+
+   * Sometimes it is possible to put the table after some kind of END
+     statement, for example `\bye' in TeX and `\end{document}' in LaTeX.
+
+   * If all else fails(1), you can just comment the table line by line
+     whenever you want to process the file, and uncomment it whenever
+     you need to edit the table.  The command `M-x
+     orgtbl-toggle-comment' does make this a viable option, in
+     particular if you bind it to a key.
+
+   ---------- Footnotes ----------
+
+   (1) In principle the source table could also be in a separate file,
+but so far this is not implemented.
+
+
+File: org,  Node: A LaTeX example,  Next: Translator functions,  Prev: Radio tables,  Up: Tables in arbitrary syntax
+
+A.2.2 A LaTeX example
+---------------------
+
+The best way to wrap the source table in LaTeX is to use the `comment'
+environment provided by `comment.sty'.  It has to be activated by
+placing `\usepackage{comment}' into the document header.  Orgtbl-mode
+can insert a radio table skeleton(1)  with the command `M-x
+orgtbl-insert-radio-table'.  You will be prompted for a table name,
+lets say we use `salesfigures'.  You will then get the following
+template:
+
+     % BEGIN RECEIVE ORGTBL salesfigures
+     % END RECEIVE ORGTBL salesfigures
+     \begin{comment}
+     #+ORGTBL: SEND salesfigures orgtbl-to-latex
+     | | |
+     \end{comment}
+
+The `#+ORGTBL: SEND' line tells orgtbl-mode to use the function
+`orgtbl-to-latex' to convert the table into LaTeX and to put it into
+the receiver location with name `salesfigures'.  You may now fill in
+the table, feel free to use the spreadsheet features(2):
+
+     % BEGIN RECEIVE ORGTBL salesfigures
+     % END RECEIVE ORGTBL salesfigures
+     \begin{comment}
+     #+ORGTBL: SEND salesfigures orgtbl-to-latex
+     | Month | Days | Nr sold | per day |
+     |-------+------+---------+---------|
+     | Jan   |   23 |      55 |     2.4 |
+     | Feb   |   21 |      16 |     0.8 |
+     | March |   22 |     278 |    12.6 |
+     #+TBLFM: $4=$3/$2;%.1f
+     % $ (optional extra dollar to keep font-lock happy, see footnote)
+     \end{comment}
+
+When you are done, press `C-c C-c' in the table to get the converted
+table inserted between the two marker lines.
+
+   Now lets assume you want to make the table header by hand, because
+you want to control how columns are aligned etc.  In this case we make
+sure that the table translator does skip the first 2 lines, and tell the
+command to work as a splice, i.e. to not produce header and footer
+commands of the table:
+
+     \begin{tabular}{lrrr}
+     Month & \multicolumn{1}{c}{Days} & Nr.\ sold & per day\\
+     % BEGIN RECEIVE ORGTBL salesfigures
+     % END RECEIVE ORGTBL salesfigures
+     \end{tabular}
+     %
+     \begin{comment}
+     #+ORGTBL: SEND salesfigures orgtbl-to-latex :splice t :skip 2
+     | Month | Days | Nr sold | per day |
+     |-------+------+---------+---------|
+     | Jan   |   23 |      55 |     2.4 |
+     | Feb   |   21 |      16 |     0.8 |
+     | March |   22 |     278 |    12.6 |
+     #+TBLFM: $4=$3/$2;%.1f
+     \end{comment}
+
+   The LaTeX translator function `orgtbl-to-latex' is already part of
+Orgtbl-mode.  It uses a `tabular' environment to typeset the table and
+marks horizontal lines with `\hline'.  Furthermore, it interprets the
+following parameters:
+
+`:splice nil/t'
+     When set to t, return only table body lines, don't wrap them into a
+     tabular environment.  Default is nil.
+
+`:fmt fmt'
+     A format to be used to wrap the field, should contain `%s' for the
+     original field value.  For example, to wrap each field value in
+     dollars, you could use `:fmt "$%s$"'.  This may also be a property
+     list with column numbers and formats. for example `:fmt (2 "$%s$"
+     4 "%s%%")'.
+
+`:efmt efmt'
+     Use this format to print numbers with exponentials.  The format
+     should have `%s' twice for inserting mantissa and exponent, for
+     example `"%s\\times10^{%s}"'.  The default is `"%s\\,(%s)"'.  This
+     may also be a property list with column numbers and formats, for
+     example `:efmt (2 "$%s\\times10^{%s}$" 4 "$%s\\cdot10^{%s}$")'.
+     After `efmt' has been applied to a value, `fmt' will also be
+     applied.
+
+   ---------- Footnotes ----------
+
+   (1) By default this works only for LaTeX, HTML, and TeXInfo.
+Configure the variable `orgtbl-radio-tables' to install templates for
+other modes.
+
+   (2) If the `#+TBLFM' line contains an odd number of dollar
+characters, this may cause problems with font-lock in latex-mode.  As
+shown in the example you can fix this by adding an extra line inside the
+`comment' environment that is used to balance the dollar expressions.
+If you are using AUCTeX with the font-latex library, a much better
+solution is to add the `comment' environment to the variable
+`LaTeX-verbatim-environments'.
+
+
+File: org,  Node: Translator functions,  Prev: A LaTeX example,  Up: Tables in arbitrary syntax
+
+A.2.3 Translator functions
+--------------------------
+
+Orgtbl-mode has several translator functions built-in:
+`orgtbl-to-latex', `orgtbl-to-html', and `orgtbl-to-texinfo'.  For
+deatils on each of them, please check the corresponding documentation
+strings.
+
+   In order to write your own translator function, start by looking at
+`orgtbl-to-latex' which is well documented.  Basically you have to
+write a function that takes two arguments.  The first argument is the
+table, a list of lines, each line either the symbol `hline' or a list
+of fields.  The second argument is a property list that will contain
+all parameters specified in the `#+ORGTBL: SEND' line.  Orgtbl-mode
+always handles the `:skip' and `:skipcols' parameters, but your
+translator function may use any number of additional parameters.  If
+you write a generally useful translator, please post it on
+`emacs-orgmode@gnu.org' so that others can benefit from your work.
+
+
+File: org,  Node: Dynamic blocks,  Next: Special agenda views,  Prev: Tables in arbitrary syntax,  Up: Extensions and Hacking
+
+A.3 Dynamic blocks
 ==================
 ==================
 
 
 Org-mode documents can contain _dynamic blocks_.  These are specially
 Org-mode documents can contain _dynamic blocks_.  These are specially
@@ -5514,7 +5752,7 @@ Org-mode.
 
 
 File: org,  Node: Special agenda views,  Prev: Dynamic blocks,  Up: Extensions and Hacking
 File: org,  Node: Special agenda views,  Prev: Dynamic blocks,  Up: Extensions and Hacking
 
 
-A.3 Special Agenda Views
+A.4 Special Agenda Views
 ========================
 ========================
 
 
 Org-mode provides a special hook that can be used to narrow down the
 Org-mode provides a special hook that can be used to narrow down the
@@ -5572,17 +5810,21 @@ Appendix B History and Acknowledgments
 **************************************
 **************************************
 
 
 Org-mode was borne in 2003, out of frustration over the user interface
 Org-mode was borne in 2003, out of frustration over the user interface
-of the Emacs outline-mode.  All I initially wanted was to make working
-with an outline tree possible without having to remember more than 10
-commands just for hiding and unhiding parts of the outline tree, and to
-allow to restructure a tree easily.  Visibility cycling and structure
-editing were originally implemented in the package `outline-magic.el',
-but quickly moved to the more general `org.el'.  TODO entries, basic
-time stamps, and table support were added next, and highlight the two
-main goals that Org-mode still has today: To create a new,
-outline-based, plain text mode with innovative and intuitive editing
-features, and to incorporate project planning functionality directly
-into a notes file.
+of the Emacs outline-mode.  I was trying to organize my notes and
+projects, and using Emacs seemed to be the natural way to go.  However,
+having to remember eleven different commands with two or three keys per
+command, only to hide and unhide parts of the outline tree, that seemed
+entirely unacceptable to me.  Also, when using outlines to take notes, I
+constantly want to restructure the tree, organizing it parallel to my
+thoughts and plans.  _Visibility cycling_ and _structure editing_ were
+originally implemented in the package `outline-magic.el', but quickly
+moved to the more general `org.el'.  As this environment became
+comfortable for project planning, the next step was adding _TODO
+entries_, basic _time stamps_, and _table support_.  These areas
+highlight the two main goals that Org-mode still has today: To create a
+new, outline-based, plain text mode with innovative and intuitive
+editing features, and to incorporate project planning functionality
+directly into a notes file.
 
 
    Since the first release, hundreds of emails to me or on
    Since the first release, hundreds of emails to me or on
 `emacs-orgmode@gnu.org' have provided a constant stream of bug reports,
 `emacs-orgmode@gnu.org' have provided a constant stream of bug reports,
@@ -5734,6 +5976,8 @@ Index
 * agenda files, removing buffers:        Agenda commands.     (line 230)
 * agenda files, removing buffers:        Agenda commands.     (line 230)
 * agenda views:                          Agenda views.        (line   6)
 * agenda views:                          Agenda views.        (line   6)
 * agenda views, custom:                  Custom agenda views. (line   6)
 * agenda views, custom:                  Custom agenda views. (line   6)
+* agenda views, user-defined:            Special agenda views.
+                                                              (line   6)
 * agenda, batch production:              Batch processing.    (line   6)
 * agenda, batch production:              Batch processing.    (line   6)
 * agenda, with block views:              Block agenda.        (line   6)
 * agenda, with block views:              Block agenda.        (line   6)
 * align, STARTUP keyword:                In-buffer settings.  (line  29)
 * align, STARTUP keyword:                In-buffer settings.  (line  29)
@@ -5747,7 +5991,7 @@ Index
 * backtrace of an error:                 Feedback.            (line  27)
 * backtrace of an error:                 Feedback.            (line  27)
 * BBDB links:                            External links.      (line   6)
 * BBDB links:                            External links.      (line   6)
 * block agenda:                          Block agenda.        (line   6)
 * block agenda:                          Block agenda.        (line   6)
-* blorg.el:                              Extensions.          (line  33)
+* blorg.el:                              Extensions.          (line  32)
 * bold text:                             Enhancing text.      (line  15)
 * bold text:                             Enhancing text.      (line  15)
 * Boolean logic, for tag searches:       Tag searches.        (line  23)
 * Boolean logic, for tag searches:       Tag searches.        (line  23)
 * bug reports:                           Feedback.            (line   6)
 * bug reports:                           Feedback.            (line   6)
@@ -5785,8 +6029,8 @@ Index
 * completion, of link abbreviations:     Completion.          (line   6)
 * completion, of link abbreviations:     Completion.          (line   6)
 * completion, of links:                  Handling links.      (line  27)
 * completion, of links:                  Handling links.      (line  27)
 * completion, of option keywords <1>:    Completion.          (line   6)
 * completion, of option keywords <1>:    Completion.          (line   6)
-* completion, of option keywords:        Export options.      (line   6)
-* Completion, of option keywords:        Per file keywords.   (line  17)
+* completion, of option keywords <2>:    Export options.      (line   6)
+* completion, of option keywords:        Per file keywords.   (line  17)
 * completion, of tags <1>:               Completion.          (line   6)
 * completion, of tags <1>:               Completion.          (line   6)
 * completion, of tags:                   Setting tags.        (line  11)
 * completion, of tags:                   Setting tags.        (line  11)
 * completion, of TeX symbols:            Completion.          (line   6)
 * completion, of TeX symbols:            Completion.          (line   6)
@@ -5815,9 +6059,9 @@ Index
                                                               (line   6)
                                                               (line   6)
 * DEADLINE keyword:                      Time stamps.         (line  53)
 * DEADLINE keyword:                      Time stamps.         (line  53)
 * deadlines:                             Time stamps.         (line   6)
 * deadlines:                             Time stamps.         (line   6)
-* Deadlines, repeating:                  Repeating items.     (line   6)
+* deadlines, repeating:                  Repeating items.     (line   6)
 * debugging, of table formulas:          Editing and debugging formulas.
 * debugging, of table formulas:          Editing and debugging formulas.
-                                                              (line  60)
+                                                              (line  70)
 * demotion, of subtrees:                 Structure editing.   (line   6)
 * demotion, of subtrees:                 Structure editing.   (line   6)
 * diary entries, creating from agenda:   Agenda commands.     (line 198)
 * diary entries, creating from agenda:   Agenda commands.     (line 198)
 * diary integration:                     Weekly/Daily agenda. (line  24)
 * diary integration:                     Weekly/Daily agenda. (line  24)
@@ -5828,6 +6072,7 @@ Index
 * display changing, in agenda:           Agenda commands.     (line  65)
 * display changing, in agenda:           Agenda commands.     (line  65)
 * document structure:                    Document structure.  (line   6)
 * document structure:                    Document structure.  (line   6)
 * DONE, final TODO keyword:              Per file keywords.   (line  20)
 * DONE, final TODO keyword:              Per file keywords.   (line  20)
+* dynamic blocks:                        Dynamic blocks.      (line   6)
 * editing tables:                        Tables.              (line   6)
 * editing tables:                        Tables.              (line   6)
 * editing, of table formulas:            Editing and debugging formulas.
 * editing, of table formulas:            Editing and debugging formulas.
                                                               (line   6)
                                                               (line   6)
@@ -5839,10 +6084,11 @@ Index
 * exporting:                             Exporting.           (line   6)
 * exporting:                             Exporting.           (line   6)
 * exporting, not:                        Comment lines.       (line   6)
 * exporting, not:                        Comment lines.       (line   6)
 * extended TODO keywords:                TODO extensions.     (line   6)
 * extended TODO keywords:                TODO extensions.     (line   6)
+* extension, third-party:                Extensions.          (line   6)
 * external archiving:                    Moving subtrees.     (line   6)
 * external archiving:                    Moving subtrees.     (line   6)
 * external links:                        External links.      (line   6)
 * external links:                        External links.      (line   6)
 * external links, in HTML export:        Links.               (line   6)
 * external links, in HTML export:        Links.               (line   6)
-* FAQ:                                   Summary.             (line  52)
+* FAQ:                                   Summary.             (line  53)
 * feedback:                              Feedback.            (line   6)
 * feedback:                              Feedback.            (line   6)
 * field formula:                         Field formulas.      (line   6)
 * field formula:                         Field formulas.      (line   6)
 * field references:                      References.          (line  14)
 * field references:                      References.          (line  14)
@@ -5861,7 +6107,7 @@ Index
                                                               (line  15)
                                                               (line  15)
 * format, of links:                      Link format.         (line   6)
 * format, of links:                      Link format.         (line   6)
 * formula debugging:                     Editing and debugging formulas.
 * formula debugging:                     Editing and debugging formulas.
-                                                              (line  60)
+                                                              (line  70)
 * formula editing:                       Editing and debugging formulas.
 * formula editing:                       Editing and debugging formulas.
                                                               (line   6)
                                                               (line   6)
 * formula syntax, Calc:                  Formula syntax for Calc.
 * formula syntax, Calc:                  Formula syntax for Calc.
@@ -5890,6 +6136,8 @@ Index
                                                               (line   6)
                                                               (line   6)
 * horizontal rules, in exported files:   Enhancing text.      (line  18)
 * horizontal rules, in exported files:   Enhancing text.      (line  18)
 * HTML export:                           HTML export.         (line   6)
 * HTML export:                           HTML export.         (line   6)
+* HTML, and orgtbl-mode:                 Translator functions.
+                                                              (line   6)
 * hyperlinks:                            Hyperlinks.          (line   6)
 * hyperlinks:                            Hyperlinks.          (line   6)
 * iCalendar export:                      iCalendar export.    (line   6)
 * iCalendar export:                      iCalendar export.    (line   6)
 * images, inline in HTML:                Images.              (line   6)
 * images, inline in HTML:                Images.              (line   6)
@@ -5915,6 +6163,7 @@ Index
 * LaTeX fragments, preview:              Processing LaTeX fragments.
 * LaTeX fragments, preview:              Processing LaTeX fragments.
                                                               (line   6)
                                                               (line   6)
 * LaTeX interpretation:                  Embedded LaTeX.      (line   6)
 * LaTeX interpretation:                  Embedded LaTeX.      (line   6)
+* LaTeX, and orgtbl-mode:                A LaTeX example.     (line   6)
 * level, require for tags match:         Tag searches.        (line  68)
 * level, require for tags match:         Tag searches.        (line  68)
 * linebreak preservation:                Export options.      (line  25)
 * linebreak preservation:                Export options.      (line  25)
 * linebreak, forced:                     Enhancing text.      (line  35)
 * linebreak, forced:                     Enhancing text.      (line  35)
@@ -5968,12 +6217,14 @@ Index
 * options, for publishing:               Publishing options.  (line   6)
 * options, for publishing:               Publishing options.  (line   6)
 * ordered lists:                         Plain lists.         (line   6)
 * ordered lists:                         Plain lists.         (line   6)
 * org-agenda, command:                   Weekly/Daily agenda. (line   9)
 * org-agenda, command:                   Weekly/Daily agenda. (line   9)
-* org-blog.el:                           Extensions.          (line  29)
+* org-blog.el:                           Extensions.          (line  28)
 * org-mode, turning on:                  Activation.          (line  22)
 * org-mode, turning on:                  Activation.          (line  22)
-* org-mouse.el:                          Extensions.          (line  17)
+* org-mouse.el:                          Extensions.          (line  16)
 * org-publish-project-alist:             Project alist.       (line   6)
 * org-publish-project-alist:             Project alist.       (line   6)
 * org-publish.el:                        Extensions.          (line   8)
 * org-publish.el:                        Extensions.          (line   8)
-* org2rem.el:                            Extensions.          (line  37)
+* org2rem.el:                            Extensions.          (line  36)
+* orgtbl-mode <1>:                       Tables in arbitrary syntax.
+                                                              (line   6)
 * orgtbl-mode:                           orgtbl-mode.         (line   6)
 * orgtbl-mode:                           orgtbl-mode.         (line   6)
 * outline tree:                          Headlines.           (line   6)
 * outline tree:                          Headlines.           (line   6)
 * outline-mode:                          Outlines.            (line   6)
 * outline-mode:                          Outlines.            (line   6)
@@ -5996,6 +6247,7 @@ Index
 * promotion, of subtrees:                Structure editing.   (line   6)
 * promotion, of subtrees:                Structure editing.   (line   6)
 * publishing:                            Publishing.          (line   6)
 * publishing:                            Publishing.          (line   6)
 * quoted HTML tags:                      Export options.      (line  25)
 * quoted HTML tags:                      Export options.      (line  25)
+* radio tables:                          Radio tables.        (line   6)
 * radio targets:                         Radio targets.       (line   6)
 * radio targets:                         Radio targets.       (line   6)
 * range references:                      References.          (line  44)
 * range references:                      References.          (line  44)
 * ranges, time:                          Time stamps.         (line   6)
 * ranges, time:                          Time stamps.         (line   6)
@@ -6018,7 +6270,7 @@ Index
 * RMAIL links:                           External links.      (line   6)
 * RMAIL links:                           External links.      (line   6)
 * SCHEDULED keyword:                     Time stamps.         (line  40)
 * SCHEDULED keyword:                     Time stamps.         (line  40)
 * scheduling:                            Time stamps.         (line   6)
 * scheduling:                            Time stamps.         (line   6)
-* Scheduling, repeating:                 Repeating items.     (line   6)
+* scheduling, repeating:                 Repeating items.     (line   6)
 * search option in file links:           Search options.      (line   6)
 * search option in file links:           Search options.      (line   6)
 * search strings, custom:                Custom searches.     (line   6)
 * search strings, custom:                Custom searches.     (line   6)
 * searching for tags:                    Tag searches.        (line   6)
 * searching for tags:                    Tag searches.        (line   6)
@@ -6064,6 +6316,8 @@ Index
 * tables <1>:                            Export options.      (line  25)
 * tables <1>:                            Export options.      (line  25)
 * tables:                                Tables.              (line   6)
 * tables:                                Tables.              (line   6)
 * tables, export:                        Enhancing text.      (line  24)
 * tables, export:                        Enhancing text.      (line  24)
+* tables, in other modes:                Tables in arbitrary syntax.
+                                                              (line   6)
 * tag completion:                        Completion.          (line   6)
 * tag completion:                        Completion.          (line   6)
 * tag searches:                          Tag searches.        (line   6)
 * tag searches:                          Tag searches.        (line   6)
 * tags:                                  Tags.                (line   6)
 * tags:                                  Tags.                (line   6)
@@ -6110,6 +6364,8 @@ Index
 * transient-mark-mode <3>:               Built-in table editor.
 * transient-mark-mode <3>:               Built-in table editor.
                                                               (line 141)
                                                               (line 141)
 * transient-mark-mode:                   Structure editing.   (line  64)
 * transient-mark-mode:                   Structure editing.   (line  64)
+* translator function:                   Translator functions.
+                                                              (line   6)
 * trees, sparse:                         Sparse trees.        (line   6)
 * trees, sparse:                         Sparse trees.        (line   6)
 * trees, visibility:                     Visibility cycling.  (line   6)
 * trees, visibility:                     Visibility cycling.  (line   6)
 * tty keybindings:                       TTY keys.            (line   6)
 * tty keybindings:                       TTY keys.            (line   6)
@@ -6163,9 +6419,11 @@ Key Index
 * <TAB> <1>:                             CDLaTeX mode.        (line  23)
 * <TAB> <1>:                             CDLaTeX mode.        (line  23)
 * <TAB> <2>:                             Agenda commands.     (line  35)
 * <TAB> <2>:                             Agenda commands.     (line  35)
 * <TAB> <3>:                             Setting tags.        (line  68)
 * <TAB> <3>:                             Setting tags.        (line  68)
-* <TAB> <4>:                             Built-in table editor.
+* <TAB> <4>:                             Editing and debugging formulas.
+                                                              (line  37)
+* <TAB> <5>:                             Built-in table editor.
                                                               (line  57)
                                                               (line  57)
-* <TAB> <5>:                             Plain lists.         (line  37)
+* <TAB> <6>:                             Plain lists.         (line  37)
 * <TAB>:                                 Visibility cycling.  (line  10)
 * <TAB>:                                 Visibility cycling.  (line  10)
 * > <1>:                                 Agenda commands.     (line 173)
 * > <1>:                                 Agenda commands.     (line 173)
 * >:                                     The date/time prompt.
 * >:                                     The date/time prompt.
@@ -6337,7 +6595,7 @@ Key Index
 * L:                                     Agenda commands.     (line  32)
 * L:                                     Agenda commands.     (line  32)
 * M:                                     Agenda commands.     (line 204)
 * M:                                     Agenda commands.     (line 204)
 * M-<down> <1>:                          Editing and debugging formulas.
 * M-<down> <1>:                          Editing and debugging formulas.
-                                                              (line  42)
+                                                              (line  52)
 * M-<down>:                              Built-in table editor.
 * M-<down>:                              Built-in table editor.
                                                               (line  82)
                                                               (line  82)
 * M-<left> <1>:                          Built-in table editor.
 * M-<left> <1>:                          Built-in table editor.
@@ -6350,9 +6608,11 @@ Key Index
 * M-<right>:                             Structure editing.   (line  24)
 * M-<right>:                             Structure editing.   (line  24)
 * M-<TAB> <1>:                           Completion.          (line  10)
 * M-<TAB> <1>:                           Completion.          (line  10)
 * M-<TAB> <2>:                           Setting tags.        (line   6)
 * M-<TAB> <2>:                           Setting tags.        (line   6)
-* M-<TAB>:                               Per file keywords.   (line  17)
+* M-<TAB> <3>:                           Per file keywords.   (line  17)
+* M-<TAB>:                               Editing and debugging formulas.
+                                                              (line  44)
 * M-<up> <1>:                            Editing and debugging formulas.
 * M-<up> <1>:                            Editing and debugging formulas.
-                                                              (line  42)
+                                                              (line  52)
 * M-<up>:                                Built-in table editor.
 * M-<up>:                                Built-in table editor.
                                                               (line  82)
                                                               (line  82)
 * M-S-<down> <1>:                        Built-in table editor.
 * M-S-<down> <1>:                        Built-in table editor.
@@ -6402,7 +6662,7 @@ Key Index
 * S-<down> <3>:                          Creating timestamps. (line  58)
 * S-<down> <3>:                          Creating timestamps. (line  58)
 * S-<down> <4>:                          Priorities.          (line  25)
 * S-<down> <4>:                          Priorities.          (line  25)
 * S-<down> <5>:                          Editing and debugging formulas.
 * S-<down> <5>:                          Editing and debugging formulas.
-                                                              (line  37)
+                                                              (line  47)
 * S-<down>:                              Plain lists.         (line  55)
 * S-<down>:                              Plain lists.         (line  55)
 * S-<left> <1>:                          Agenda commands.     (line 169)
 * S-<left> <1>:                          Agenda commands.     (line 169)
 * S-<left> <2>:                          The date/time prompt.
 * S-<left> <2>:                          The date/time prompt.
@@ -6425,7 +6685,7 @@ Key Index
 * S-<up> <3>:                            Creating timestamps. (line  58)
 * S-<up> <3>:                            Creating timestamps. (line  58)
 * S-<up> <4>:                            Priorities.          (line  25)
 * S-<up> <4>:                            Priorities.          (line  25)
 * S-<up> <5>:                            Editing and debugging formulas.
 * S-<up> <5>:                            Editing and debugging formulas.
-                                                              (line  37)
+                                                              (line  47)
 * S-<up>:                                Plain lists.         (line  55)
 * S-<up>:                                Plain lists.         (line  55)
 * T:                                     Agenda commands.     (line 126)
 * T:                                     Agenda commands.     (line 126)
 * t:                                     Agenda commands.     (line 113)
 * t:                                     Agenda commands.     (line 113)
@@ -6437,175 +6697,182 @@ Key Index
 
 
 Tag Table:
 Tag Table:
 Node: Top970
 Node: Top970
-Node: Introduction11179
-Node: Summary11594
-Node: Installation14495
-Node: Activation15873
-Node: Feedback17122
-Node: Document structure19198
-Node: Outlines19972
-Node: Headlines20632
-Node: Visibility cycling21255
-Ref: Visibility cycling-Footnote-123346
-Ref: Visibility cycling-Footnote-223404
-Ref: Visibility cycling-Footnote-323454
-Node: Motion23723
-Node: Structure editing24507
-Node: Archiving27333
-Node: ARCHIVE tag27891
-Node: Moving subtrees29684
-Node: Sparse trees30995
-Ref: Sparse trees-Footnote-133127
-Ref: Sparse trees-Footnote-233309
-Node: Plain lists33424
-Ref: Plain lists-Footnote-136949
-Ref: Plain lists-Footnote-237306
-Node: Tables37490
-Node: Built-in table editor38004
-Node: Narrow columns45000
-Ref: Narrow columns-Footnote-146932
-Node: orgtbl-mode46978
-Node: The spreadsheet47472
-Node: References48290
-Node: Formula syntax for Calc51547
-Node: Formula syntax for Lisp53864
-Node: Field formulas55092
-Node: Column formulas56403
-Node: Editing and debugging formulas57826
-Node: Updating the table60534
-Node: Advanced features61565
-Node: Hyperlinks65990
-Node: Link format66763
-Node: Internal links68056
-Ref: Internal links-Footnote-170045
-Node: Radio targets70177
-Node: CamelCase links70892
-Node: External links71486
-Node: Handling links73890
-Ref: Handling links-Footnote-178982
-Ref: Handling links-Footnote-279219
-Node: Link abbreviations79293
-Node: Search options80972
-Ref: Search options-Footnote-182752
-Node: Custom searches82833
-Node: Remember83881
-Node: Setting up remember84868
-Node: Remember templates85450
-Ref: Remember templates-Footnote-188765
-Node: Storing notes88863
-Node: TODO items90671
-Node: TODO basics91653
-Node: TODO extensions93180
-Node: Workflow states93975
-Node: TODO types94960
-Ref: TODO types-Footnote-196618
-Node: Per file keywords96700
-Ref: Per file keywords-Footnote-198154
-Node: Priorities98355
-Node: Breaking down tasks99599
-Ref: Breaking down tasks-Footnote-1100118
-Node: Checkboxes100214
-Node: Timestamps102969
-Node: Time stamps103503
-Ref: Time stamps-Footnote-1106997
-Ref: Time stamps-Footnote-2107113
-Node: Creating timestamps107268
-Node: The date/time prompt109894
-Ref: The date/time prompt-Footnote-1111660
-Node: Custom time format111766
-Node: Repeating items113324
-Node: Progress logging115134
-Node: Closing items115780
-Ref: Closing items-Footnote-1116714
-Ref: Closing items-Footnote-2116783
-Node: Tracking TODO state changes116856
-Node: Clocking work time117712
-Ref: Clocking work time-Footnote-1121358
-Ref: Clocking work time-Footnote-2121436
-Node: Tags121562
-Node: Tag inheritance122324
-Node: Setting tags123261
-Ref: Setting tags-Footnote-1127460
-Ref: Setting tags-Footnote-2127572
-Node: Tag searches127655
-Node: Agenda views130366
-Node: Agenda files132311
-Ref: Agenda files-Footnote-1133277
-Ref: Agenda files-Footnote-2133426
-Node: Agenda dispatcher133619
-Node: Built-in agenda views135310
-Node: Weekly/Daily agenda135888
-Node: Global TODO list138017
-Node: Matching headline tags140190
-Node: Timeline141261
-Node: Stuck projects141927
-Node: Presentation and sorting143626
-Node: Categories144417
-Node: Time-of-day specifications145081
-Node: Sorting of agenda items147052
-Node: Agenda commands148334
-Node: Custom agenda views154987
-Node: Storing searches155662
-Node: Block agenda157574
-Node: Setting Options158804
-Node: Batch processing161516
-Node: Embedded LaTeX162646
-Ref: Embedded LaTeX-Footnote-1163738
-Node: Math symbols163928
-Node: Subscripts and Superscripts164693
-Node: LaTeX fragments165537
-Ref: LaTeX fragments-Footnote-1167645
-Node: Processing LaTeX fragments167907
-Node: CDLaTeX mode168853
-Ref: CDLaTeX mode-Footnote-1171337
-Node: Exporting171485
-Node: ASCII export172799
-Node: HTML export174089
-Node: Export commands174708
-Node: Quoting HTML tags175432
-Node: Links175895
-Node: Images176592
-Ref: Images-Footnote-1177463
-Node: CSS support177524
-Ref: CSS support-Footnote-1178843
-Node: XOXO export178956
-Node: iCalendar export179395
-Node: Text interpretation180498
-Node: Comment lines180977
-Node: Enhancing text181448
-Node: Export options183266
-Node: Publishing184933
-Ref: Publishing-Footnote-1185729
-Node: Configuration185925
-Node: Project alist186643
-Node: Sources and destinations187709
-Node: Selecting files188439
-Node: Publishing action189187
-Node: Publishing options190420
-Node: Publishing links192572
-Node: Project page index194085
-Node: Sample configuration194863
-Node: Simple example195355
-Node: Complex example196028
-Node: Triggering publication198104
-Node: Miscellaneous198789
-Node: Completion199423
-Node: Customization200894
-Node: In-buffer settings201477
-Node: The very busy C-c C-c key205717
-Node: Clean view207361
-Node: TTY keys209938
-Node: Interaction211547
-Node: Cooperation211944
-Node: Conflicts214684
-Node: Bugs216276
-Node: Extensions and Hacking217772
-Node: Extensions218276
-Node: Dynamic blocks220219
-Node: Special agenda views222175
-Ref: Special agenda views-Footnote-1224454
-Node: History and Acknowledgments224714
-Node: Index230218
-Node: Key Index260293
+Node: Introduction11466
+Node: Summary11881
+Node: Installation14889
+Node: Activation16267
+Node: Feedback17516
+Node: Document structure19592
+Node: Outlines20366
+Node: Headlines21026
+Node: Visibility cycling21649
+Ref: Visibility cycling-Footnote-123740
+Ref: Visibility cycling-Footnote-223798
+Ref: Visibility cycling-Footnote-323848
+Node: Motion24117
+Node: Structure editing24901
+Node: Archiving27727
+Node: ARCHIVE tag28285
+Node: Moving subtrees30078
+Node: Sparse trees31389
+Ref: Sparse trees-Footnote-133521
+Ref: Sparse trees-Footnote-233703
+Node: Plain lists33818
+Ref: Plain lists-Footnote-137343
+Ref: Plain lists-Footnote-237700
+Node: Tables37884
+Node: Built-in table editor38398
+Node: Narrow columns45394
+Ref: Narrow columns-Footnote-147326
+Node: orgtbl-mode47372
+Node: The spreadsheet48176
+Node: References48994
+Node: Formula syntax for Calc52251
+Node: Formula syntax for Lisp54568
+Node: Field formulas55796
+Node: Column formulas57107
+Node: Editing and debugging formulas58530
+Node: Updating the table61640
+Node: Advanced features62671
+Node: Hyperlinks67196
+Node: Link format67969
+Node: Internal links69262
+Ref: Internal links-Footnote-171251
+Node: Radio targets71383
+Node: CamelCase links72098
+Node: External links72692
+Node: Handling links75096
+Ref: Handling links-Footnote-180188
+Ref: Handling links-Footnote-280425
+Node: Link abbreviations80499
+Node: Search options82178
+Ref: Search options-Footnote-183958
+Node: Custom searches84039
+Node: Remember85087
+Node: Setting up remember86074
+Node: Remember templates86656
+Ref: Remember templates-Footnote-189971
+Node: Storing notes90069
+Node: TODO items91877
+Node: TODO basics92859
+Node: TODO extensions94386
+Node: Workflow states95181
+Node: TODO types96166
+Ref: TODO types-Footnote-197824
+Node: Per file keywords97906
+Ref: Per file keywords-Footnote-199360
+Node: Priorities99561
+Node: Breaking down tasks100805
+Ref: Breaking down tasks-Footnote-1101324
+Node: Checkboxes101420
+Node: Timestamps104175
+Node: Time stamps104709
+Ref: Time stamps-Footnote-1108203
+Ref: Time stamps-Footnote-2108319
+Node: Creating timestamps108474
+Node: The date/time prompt111100
+Ref: The date/time prompt-Footnote-1112866
+Node: Custom time format112972
+Node: Repeating items114530
+Node: Progress logging116340
+Node: Closing items116986
+Ref: Closing items-Footnote-1117920
+Ref: Closing items-Footnote-2117989
+Node: Tracking TODO state changes118062
+Node: Clocking work time118918
+Ref: Clocking work time-Footnote-1122564
+Ref: Clocking work time-Footnote-2122642
+Node: Tags122768
+Node: Tag inheritance123530
+Node: Setting tags124467
+Ref: Setting tags-Footnote-1128666
+Ref: Setting tags-Footnote-2128778
+Node: Tag searches128861
+Node: Agenda views131572
+Node: Agenda files133517
+Ref: Agenda files-Footnote-1134483
+Ref: Agenda files-Footnote-2134632
+Node: Agenda dispatcher134825
+Node: Built-in agenda views136516
+Node: Weekly/Daily agenda137094
+Node: Global TODO list139223
+Node: Matching headline tags141396
+Node: Timeline142467
+Node: Stuck projects143133
+Node: Presentation and sorting144832
+Node: Categories145623
+Node: Time-of-day specifications146287
+Node: Sorting of agenda items148258
+Node: Agenda commands149540
+Node: Custom agenda views156193
+Node: Storing searches156868
+Node: Block agenda158780
+Node: Setting Options160010
+Node: Batch processing162722
+Node: Embedded LaTeX163852
+Ref: Embedded LaTeX-Footnote-1164944
+Node: Math symbols165134
+Node: Subscripts and Superscripts165899
+Node: LaTeX fragments166743
+Ref: LaTeX fragments-Footnote-1168851
+Node: Processing LaTeX fragments169113
+Node: CDLaTeX mode170059
+Ref: CDLaTeX mode-Footnote-1172543
+Node: Exporting172691
+Node: ASCII export174005
+Node: HTML export175295
+Node: Export commands175914
+Node: Quoting HTML tags176638
+Node: Links177101
+Node: Images177798
+Ref: Images-Footnote-1178669
+Node: CSS support178730
+Ref: CSS support-Footnote-1180049
+Node: XOXO export180162
+Node: iCalendar export180601
+Node: Text interpretation181704
+Node: Comment lines182183
+Node: Enhancing text182654
+Node: Export options184472
+Node: Publishing186139
+Ref: Publishing-Footnote-1186935
+Node: Configuration187131
+Node: Project alist187849
+Node: Sources and destinations188915
+Node: Selecting files189645
+Node: Publishing action190393
+Node: Publishing options191626
+Node: Publishing links193778
+Node: Project page index195291
+Node: Sample configuration196069
+Node: Simple example196561
+Node: Complex example197234
+Node: Triggering publication199310
+Node: Miscellaneous199995
+Node: Completion200629
+Node: Customization202100
+Node: In-buffer settings202683
+Node: The very busy C-c C-c key206923
+Node: Clean view208567
+Node: TTY keys211144
+Node: Interaction212753
+Node: Cooperation213150
+Node: Conflicts215890
+Node: Bugs217482
+Node: Extensions and Hacking218978
+Node: Extensions219574
+Node: Tables in arbitrary syntax221521
+Node: Radio tables222596
+Ref: Radio tables-Footnote-1225128
+Node: A LaTeX example225236
+Ref: A LaTeX example-Footnote-1228852
+Ref: A LaTeX example-Footnote-2229000
+Node: Translator functions229435
+Node: Dynamic blocks230466
+Node: Special agenda views232438
+Ref: Special agenda views-Footnote-1234717
+Node: History and Acknowledgments234977
+Node: Index240766
+Node: Key Index271825
 
 
 End Tag Table
 End Tag Table

+ 478 - 67
org.el

@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.64a
+;; Version: 4.65
 ;;
 ;;
 ;; This file is part of GNU Emacs.
 ;; This file is part of GNU Emacs.
 ;;
 ;;
@@ -83,7 +83,7 @@
 
 
 ;;; Version
 ;;; Version
 
 
-(defvar org-version "4.64a"
+(defvar org-version "4.65"
   "The version number of the file org.el.")
   "The version number of the file org.el.")
 (defun org-version ()
 (defun org-version ()
   (interactive)
   (interactive)
@@ -679,6 +679,33 @@ this variable requires a restart of Emacs to become effective."
   :group 'org-table
   :group 'org-table
   :type 'boolean)
   :type 'boolean)
 
 
+(defcustom orgtbl-radio-table-templates
+  '((latex-mode "% BEGIN RECEIVE ORGTBL %n
+% END RECEIVE ORGTBL %n
+\\begin{comment}
+#+ORGTBL: SEND %n orgtbl-to-latex :splice nil :skip 0
+| | |
+\\end{comment}\n")
+    (texinfo-mode "@c BEGIN RECEIVE ORGTBL %n
+@c END RECEIVE ORGTBL %n
+@ignore
+#+ORGTBL: SEND %n orgtbl-to-html :splice nil :skip 0
+| | |
+@end ignore\n")
+    (html-mode "<!-- BEGIN RECEIVE ORGTBL %n -->
+<!-- END RECEIVE ORGTBL %n -->
+<!--
+#+ORGTBL: SEND %n orgtbl-to-html :splice nil :skip 0
+| | |
+-->\n"))
+  "Templates for radio tables in different major modes.
+All occurrences of %n in a template will be replaced with the name of the
+table, obtained by prompting the user."
+  :group 'org-table
+  :type '(repeat
+	  (list (symbol :tag "Major mode")
+		(string :tag "Format"))))
+
 (defgroup org-table-settings nil
 (defgroup org-table-settings nil
   "Settings for tables in Org-mode."
   "Settings for tables in Org-mode."
   :tag "Org Table Settings"
   :tag "Org Table Settings"
@@ -2540,7 +2567,7 @@ Otherwise the buffer will just be saved to a file and stay hidden."
   table { border-collapse: collapse; }
   table { border-collapse: collapse; }
   td, th {
   td, th {
 	vertical-align: top;
 	vertical-align: top;
-	border: 1pt solid #ADB9CC;
+	<!--border: 1pt solid #ADB9CC;-->
   }
   }
 </style>"
 </style>"
   "The default style specification for exported HTML files.
   "The default style specification for exported HTML files.
@@ -2610,7 +2637,7 @@ This option can also be set with the +OPTIONS line, e.g. \"@:nil\"."
   :type 'boolean)
   :type 'boolean)
 
 
 (defcustom org-export-html-table-tag
 (defcustom org-export-html-table-tag
-  "<table border=\"1\" cellspacing=\"0\" cellpadding=\"6\">"
+  "<table border=\"2\" cellspacing=\"0\" cellpadding=\"6\" rules=\"groups\" frame=\"hsides\">"
   "The HTML tag used to start a table.
   "The HTML tag used to start a table.
 This must be a <table> tag, but you may change the options like
 This must be a <table> tag, but you may change the options like
 borders and spacing."
 borders and spacing."
@@ -7945,6 +7972,10 @@ Parameters get priority."
 (define-key org-edit-formulas-map [(shift right)] 'org-table-edit-next-field)
 (define-key org-edit-formulas-map [(shift right)] 'org-table-edit-next-field)
 (define-key org-edit-formulas-map [(meta up)]     'org-table-edit-scroll-down)
 (define-key org-edit-formulas-map [(meta up)]     'org-table-edit-scroll-down)
 (define-key org-edit-formulas-map [(meta down)]   'org-table-edit-scroll)
 (define-key org-edit-formulas-map [(meta down)]   'org-table-edit-scroll)
+(define-key org-edit-formulas-map [(meta tab)]    'lisp-complete-symbol)
+(define-key org-edit-formulas-map "\M-\C-i"       'lisp-complete-symbol)
+(define-key org-edit-formulas-map [(tab)]         'org-edit-formula-lisp-indent)
+(define-key org-edit-formulas-map "\C-i"          'org-edit-formula-lisp-indent)
 
 
 (defvar org-pos)
 (defvar org-pos)
 
 
@@ -7965,39 +7996,45 @@ Parameters get priority."
     (use-local-map org-edit-formulas-map)
     (use-local-map org-edit-formulas-map)
     (org-add-hook 'post-command-hook 'org-table-edit-formulas-post-command t t)
     (org-add-hook 'post-command-hook 'org-table-edit-formulas-post-command t t)
     (setq s "# `C-c C-c' to finish, `C-u C-c C-c' to also apply, `C-c C-q' to abort.
     (setq s "# `C-c C-c' to finish, `C-u C-c C-c' to also apply, `C-c C-q' to abort.
-# `M-up/down' to scroll table, `S-up/down' to change line for column formulas\n")
+# `TAB' to pretty-print Lisp expressions, `M-TAB' to complete List symbols
+# `M-up/down' to scroll table, `S-up/down' to change line for column formulas\n\n")
 
 
     (put-text-property 0 (length s) 'face 'font-lock-comment-face s)
     (put-text-property 0 (length s) 'face 'font-lock-comment-face s)
     (insert s)
     (insert s)
     (while (setq entry (pop eql))
     (while (setq entry (pop eql))
       (setq s (concat (if (equal (string-to-char (car entry)) ?@) "" "$")
       (setq s (concat (if (equal (string-to-char (car entry)) ?@) "" "$")
-		      (car entry) "=" (cdr entry) "\n"))
+		      (car entry) " = " (cdr entry) "\n"))
       (remove-text-properties 0 (length s) '(face nil) s)
       (remove-text-properties 0 (length s) '(face nil) s)
       (insert s))
       (insert s))
     (goto-char (point-min))
     (goto-char (point-min))
     (message "Edit formulas and finish with `C-c C-c'.")))
     (message "Edit formulas and finish with `C-c C-c'.")))
 
 
 (defun org-table-edit-formulas-post-command ()
 (defun org-table-edit-formulas-post-command ()
-  (let ((win (selected-window)))
-    (save-excursion
-      (condition-case nil
-	  (org-show-reference)
-	(error nil))
-      (select-window win))))
+  (when (not (memq this-command '(lisp-complete-symbol)))
+    (let ((win (selected-window)))
+      (save-excursion
+	(condition-case nil
+	    (org-show-reference)
+	  (error nil))
+	(select-window win)))))
 
 
 (defun org-finish-edit-formulas (&optional arg)
 (defun org-finish-edit-formulas (&optional arg)
   "Parse the buffer for formula definitions and install them.
   "Parse the buffer for formula definitions and install them.
 With prefix ARG, apply the new formulas to the table."
 With prefix ARG, apply the new formulas to the table."
   (interactive "P")
   (interactive "P")
   (org-table-remove-rectangle-highlight)
   (org-table-remove-rectangle-highlight)
-  (let ((pos org-pos) eql)
+  (let ((pos org-pos) eql var form)
     (setq org-pos nil)
     (setq org-pos nil)
     (goto-char (point-min))
     (goto-char (point-min))
     (while (re-search-forward
     (while (re-search-forward
-	    "^\\(@[0-9]+\\$[0-9]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*?\\) *$"
+	    "^\\(@[0-9]+\\$[0-9]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*\\(\n[ \t]+.*$\\)*\\)"
 	    nil t)
 	    nil t)
-      (push (cons (if (match-end 2) (match-string 2) (match-string 1))
-		  (match-string 3)) eql))
+      (setq var (if (match-end 2) (match-string 2) (match-string 1))
+	    form (match-string 3))
+      (setq form (org-trim form))
+      (while (string-match "[ \t]*\n[ \t]*" form)
+	(setq form (replace-match " " t t form)))
+      (push (cons var form) eql))
     (set-window-configuration org-window-configuration)
     (set-window-configuration org-window-configuration)
     (select-window (get-buffer-window (marker-buffer pos)))
     (select-window (get-buffer-window (marker-buffer pos)))
     (goto-char pos)
     (goto-char pos)
@@ -8021,6 +8058,45 @@ With prefix ARG, apply the new formulas to the table."
     (move-marker pos nil)
     (move-marker pos nil)
     (message "Formula editing aborted without installing changes")))
     (message "Formula editing aborted without installing changes")))
 
 
+(defun org-edit-formula-lisp-indent ()
+  "Pretty-print and re-indent Lisp expressions in the Formula Editor."
+  (interactive)
+  (let ((pos (point)) beg end ind)
+    (beginning-of-line 1)
+    (cond
+     ((looking-at "[ \t]")
+      (goto-char pos)
+      (call-interactively 'lisp-indent-line))
+     ((looking-at "[$@0-9a-zA-Z]+ *= *[^ \t\n']") (goto-char pos))
+     ((not (fboundp 'pp-buffer))
+      (error "Cannot pretty-print.  Command `pp-buffer' is not available."))
+     ((looking-at "[$@0-9a-zA-Z]+ *= *'(")
+      (goto-char (- (match-end 0) 2))
+      (setq beg (point))
+      (setq ind (make-string (current-column) ?\ ))
+      (condition-case nil (forward-sexp 1)
+	(error
+	 (error "Cannot pretty-print Lisp expression: Unbalanced parenthesis")))
+      (setq end (point))
+      (save-restriction
+	(narrow-to-region beg end)
+	(if (eq last-command this-command)
+	    (progn
+	      (goto-char (point-min))
+	      (setq this-command nil)
+	      (while (re-search-forward "[ \t]*\n[ \t]*" nil t)
+		(replace-match " ")))
+	  (pp-buffer)
+	  (untabify (point-min) (point-max))
+	  (goto-char (1+ (point-min)))
+	  (while (re-search-forward "^." nil t)
+	    (beginning-of-line 1)
+	    (insert ind))
+	  (goto-char (point-max))
+	  (backward-delete-char 1)))
+      (goto-char beg))
+     (t nil))))
+
 (defvar org-show-positions nil)
 (defvar org-show-positions nil)
 
 
 (defun org-show-reference (&optional local)
 (defun org-show-reference (&optional local)
@@ -8132,7 +8208,7 @@ With prefix ARG, apply the new formulas to the table."
 	(let ((min (apply 'min org-show-positions))
 	(let ((min (apply 'min org-show-positions))
 	      (max (apply 'max org-show-positions)))
 	      (max (apply 'max org-show-positions)))
 	  (when (or (not (pos-visible-in-window-p min))
 	  (when (or (not (pos-visible-in-window-p min))
-		    (no t(pos-visible-in-window-p max)))
+		    (not (pos-visible-in-window-p max)))
 	    (goto-char min)
 	    (goto-char min)
 	    (set-window-start (selected-window) (point-at-bol))
 	    (set-window-start (selected-window) (point-at-bol))
 	    (goto-char pos))))
 	    (goto-char pos))))
@@ -8283,6 +8359,14 @@ table editor in arbitrary modes.")
 (defvar org-old-auto-fill-inhibit-regexp nil
 (defvar org-old-auto-fill-inhibit-regexp nil
   "Local variable used by `orgtbl-mode'")
   "Local variable used by `orgtbl-mode'")
 
 
+(defconst orgtbl-line-start-regexp "[ \t]*\\(|\\|#\\+\\(TBLFM\\|ORGTBL\\):\\)"
+  "Matches a line belonging to an orgtbl.")
+
+(defconst orgtbl-extra-font-lock-keywords
+  (list (list (concat "^" orgtbl-line-start-regexp ".*")
+	      0 (quote 'org-table) 'prepend))
+  "Extra font-lock-keywords to be added when orgtbl-mode is active.")
+
 ;;;###autoload
 ;;;###autoload
 (defun orgtbl-mode (&optional arg)
 (defun orgtbl-mode (&optional arg)
   "The `org-mode' table editor as a minor mode for use in other modes."
   "The `org-mode' table editor as a minor mode for use in other modes."
@@ -8307,15 +8391,22 @@ table editor in arbitrary modes.")
 			 auto-fill-inhibit-regexp)
 			 auto-fill-inhibit-regexp)
 	  (org-set-local 'auto-fill-inhibit-regexp
 	  (org-set-local 'auto-fill-inhibit-regexp
 			 (if auto-fill-inhibit-regexp
 			 (if auto-fill-inhibit-regexp
-			     (concat "\\([ \t]*|\\|" auto-fill-inhibit-regexp)
-			   "[ \t]*|"))
+			     (concat orgtbl-line-start-regexp "\\|"
+				     auto-fill-inhibit-regexp)
+			   orgtbl-line-start-regexp))
 	  (org-add-to-invisibility-spec '(org-cwidth))
 	  (org-add-to-invisibility-spec '(org-cwidth))
+	  (when (fboundp 'font-lock-add-keywords)
+	    (font-lock-add-keywords nil orgtbl-extra-font-lock-keywords)
+	    (org-restart-font-lock))
 	  (easy-menu-add orgtbl-mode-menu)
 	  (easy-menu-add orgtbl-mode-menu)
 	  (run-hooks 'orgtbl-mode-hook))
 	  (run-hooks 'orgtbl-mode-hook))
       (setq auto-fill-inhibit-regexp org-old-auto-fill-inhibit-regexp)
       (setq auto-fill-inhibit-regexp org-old-auto-fill-inhibit-regexp)
       (org-cleanup-narrow-column-properties)
       (org-cleanup-narrow-column-properties)
       (org-remove-from-invisibility-spec '(org-cwidth))
       (org-remove-from-invisibility-spec '(org-cwidth))
       (remove-hook 'before-change-functions 'org-before-change-function t)
       (remove-hook 'before-change-functions 'org-before-change-function t)
+      (when (fboundp 'font-lock-remove-keywords)
+	(font-lock-remove-keywords nil orgtbl-extra-font-lock-keywords)
+	(org-restart-font-lock))
       (easy-menu-remove orgtbl-mode-menu)
       (easy-menu-remove orgtbl-mode-menu)
       (force-mode-line-update 'all))))
       (force-mode-line-update 'all))))
 
 
@@ -8418,7 +8509,7 @@ to execute outside of tables."
     (define-key orgtbl-mode-map "\C-i"
     (define-key orgtbl-mode-map "\C-i"
       (orgtbl-make-binding 'orgtbl-tab 104 [(shift tab)]))
       (orgtbl-make-binding 'orgtbl-tab 104 [(shift tab)]))
     (define-key orgtbl-mode-map "\C-c\C-c"
     (define-key orgtbl-mode-map "\C-c\C-c"
-      (orgtbl-make-binding 'org-ctrl-c-ctrl-c 105 "\C-c\C-c"))
+      (orgtbl-make-binding 'orgtbl-ctrl-c-ctrl-c 105 "\C-c\C-c"))
     (when orgtbl-optimized
     (when orgtbl-optimized
       ;; If the user wants maximum table support, we need to hijack
       ;; If the user wants maximum table support, we need to hijack
       ;; some standard editing functions
       ;; some standard editing functions
@@ -8429,6 +8520,11 @@ to execute outside of tables."
       (define-key orgtbl-mode-map "|" 'org-force-self-insert))
       (define-key orgtbl-mode-map "|" 'org-force-self-insert))
     (easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu"
     (easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu"
       '("OrgTbl"
       '("OrgTbl"
+	("Radio tables"
+	 ["Insert radio table" orgtbl-insert-radio-table
+	  (assq major-mode orgtbl-radio-table-templates)]
+	 ["Comment/uncomment table" orgtbl-toggle-comment t]) ;; FIXME: only at a table
+	"--"
 	["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"]
 	["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"]
 	["Next Field" org-cycle :active (org-at-table-p) :keys "TAB"]
 	["Next Field" org-cycle :active (org-at-table-p) :keys "TAB"]
 	["Previous Field" org-shifttab :active (org-at-table-p) :keys "S-TAB"]
 	["Previous Field" org-shifttab :active (org-at-table-p) :keys "S-TAB"]
@@ -8476,6 +8572,18 @@ to execute outside of tables."
 	))
 	))
     t)
     t)
 
 
+(defun orgtbl-ctrl-c-ctrl-c (arg)
+  "If the cursor is inside a table, realign the table.
+It it is a table to be sent away to a receiver, do it.
+With prefix arg, also recompute table."
+  (interactive "P")
+  (org-table-maybe-eval-formula)
+  (if arg
+      (call-interactively 'org-table-recalculate)
+    (org-table-maybe-recalculate-line))
+  (call-interactively 'org-table-align)
+  (orgtbl-send-table 'maybe))
+
 (defun orgtbl-tab (arg)
 (defun orgtbl-tab (arg)
   "Justification and field motion for `orgtbl-mode'."
   "Justification and field motion for `orgtbl-mode'."
   (interactive "P")
   (interactive "P")
@@ -8522,6 +8630,272 @@ overwritten, and the table is not marked as requiring realignment."
   (interactive "p")
   (interactive "p")
   (self-insert-command N))
   (self-insert-command N))
 
 
+(defvar orgtbl-exp-regexp "^\\([-+]?[0-9][0-9.]*\\)[eE]\\([-+]?[0-9]+\\)$"
+  "Regula expression matching exponentials as produced by calc.")
+
+(defvar org-table-clean-did-remove-column-1 nil)
+
+(defun orgtbl-send-table (&optional maybe)
+  "Send a tranformed version of this table to the receiver position.
+With argument MAYBE, fail quietly if no transformation is defined for
+this table."
+  (interactive)
+  (catch 'exit
+    (unless (org-at-table-p) (error "Not at a table"))
+    ;; when non-interactive, we assume align has just happened.
+    (when (interactive-p) (org-table-align))
+    (save-excursion
+      (goto-char (org-table-begin))
+      (beginning-of-line 0)
+      (unless (looking-at "#\\+ORGTBL: *SEND +\\([a-zA-Z0-9_]+\\) +\\([^ \t\r\n]+\\)\\( +.*\\)?")
+	(if maybe
+	    (throw 'exit nil)
+	  (error "Don't know how to transform this table."))))
+    (let* ((name (match-string 1))
+	   i line beg
+	   (transform (intern (match-string 2)))
+	   (params (if (match-end 3) (read (concat "(" (match-string 3) ")"))))
+	   (skip (plist-get params :skip))
+	   (skipcols (plist-get params :skipcols))
+	   (txt (buffer-substring-no-properties
+		 (org-table-begin) (org-table-end)))
+	   (lines (nthcdr (or skip 0) (org-split-string txt "[ \t]*\n[ \t]*")))
+	   (lines (org-table-clean-before-export lines))
+	   (table (mapcar
+		   (lambda (x)
+		     (if (string-match org-table-hline-regexp x)
+			 'hline
+		       (setq line (org-split-string (org-trim x) "\\s-*|\\s-*"))
+		       (when skipcols
+			 ;; Remove columns that should be skipped
+			 (setq i (if org-table-clean-did-remove-column-1 1 0)
+			       line
+			       (delq nil 
+				     (mapcar (lambda (x)
+					       (if (member (setq i (1+ i))
+							   skipcols) nil x))
+					     line))))
+		       line))
+		   lines)))
+
+      (unless (fboundp transform)
+	(error "No such transformation function %s" transform))
+      (setq txt (funcall transform table params))
+      ;; Find the insertion place
+      (save-excursion
+	(goto-char (point-min))
+	(unless (re-search-forward
+		 (concat "BEGIN RECEIVE ORGTBL +" name "\\([ \t]\\|$\\)") nil t)
+	  (error "Don't know where to insert translated table"))
+	(goto-char (match-beginning 0))
+	(beginning-of-line 2)
+	(setq beg (point))
+	(unless (re-search-forward (concat "END RECEIVE ORGTBL +" name) nil t)
+	  (error "Cannot find end of insertion region"))
+	(beginning-of-line 1)
+	(delete-region beg (point))
+	(goto-char beg)
+	(insert txt "\n"))
+      (message "Table converted and installed at receiver location"))))
+
+(defun orgtbl-toggle-comment ()
+  "Comment or uncomment the orgtbl at point."
+  (interactive)
+  (let* ((re1 (concat "^" (regexp-quote comment-start) orgtbl-line-start-regexp))
+	 (re2 (concat "^" orgtbl-line-start-regexp))
+	 (commented (save-excursion (beginning-of-line 1)
+			     (cond ((looking-at re1) t)
+				   ((looking-at re2) nil)
+				   (t (error "Not at an org table")))))
+	 (re (if commented re1 re2))
+	 beg end)
+    (save-excursion
+      (beginning-of-line 1)
+      (while (looking-at re) (beginning-of-line 0))
+      (beginning-of-line 2)
+      (setq beg (point))
+      (while (looking-at re) (beginning-of-line 2))
+      (setq end (point)))
+    (comment-region beg end (if commented '(4) nil))))
+
+(defun orgtbl-insert-radio-table ()
+  "Insert a radio table template appropriate for this major mode."
+  (interactive)
+  (let* ((e (assq major-mode orgtbl-radio-table-templates))
+	 (txt (nth 1 e))
+	 name pos)
+    (unless e (error "No radio table setup defined for %s" major-mode))
+    (setq name (read-string "Table name: "))
+    (while (string-match "%n" txt)
+      (setq txt (replace-match name t t txt)))
+    (or (bolp) (insert "\n"))
+    (setq pos (point))
+    (insert txt)
+    (goto-char pos)))
+    
+(defun orgtbl-to-latex (table params)
+  "Convert the orgtbl-mode TABLE to LaTeX.
+TABLE is a list, each entry either the symbol `hline' for a horizontal
+separator line, or a list of fields for that line.
+PARAMS is a property list of parameters that can influence the conversion.
+Valid parameters are
+
+:splice nil/t      When set to t, return only table body lines, don't wrap
+                   them into a tabular environment.  Default is nil.
+
+:fmt fmt           A format to be used to wrap the field, should contain
+                   %s for the original field value.  For example, to wrap
+                   everything in dollars, you could use :fmt \"$%s$\".
+                   This may also be a property list with column numbers and
+                   formats. for example :fmt (2 \"$%s$\" 4 \"%s%%\")
+
+:efmt efmt         Use this format to print numbers with exponentials.
+                   The format should have %s twice for inserting mantissa
+                   and exponent, for example \"%s\\\\times10^{%s}\".  Default
+                   is \"%s\\\\,(%s)\".  This may also be a property list
+                   with column numbers and formats.
+
+In addition to this, a number of standard parameters are always handled
+directly by `orgtbl-send-table'.  See manual."
+  (interactive)
+  (let* ((splicep (plist-get params :splice))  ; do we need table header?
+	 (fmt (plist-get params :fmt))         ; General format
+	 (efmt (plist-get params :efmt))       ; Format for numbers with exp
+	 rtn                                   ; list collecting converted lines
+	 alignment line i fm efm)
+    
+    ;; First check if we need to put the tabular environment ourselves
+    (unless splicep
+      ;; yes, we do
+      (setq alignment (mapconcat (lambda (x) (if x "r" "l"))
+				 org-table-last-alignment ""))
+      (push (concat "\\begin{tabular}{" alignment "}") rtn))
+
+    ;; Now loop over all lines
+    (while (setq line (pop table))
+      (if (eq line 'hline)
+	  ;; A horizontal separator line
+	  (push "\\hline" rtn)
+	;; A normal line.  Convert the fields, push line onto the result list
+	(setq i 0)  ; counter for column, to access column-specific settings
+	(push
+	 (concat
+	  (mapconcat
+	   (lambda (f)
+	     ;; First get the settings that apply here.
+	     (setq i (1+ i)
+		   fm (if (stringp fmt) fmt (or (plist-get fmt i) "%s"))
+		   efm (if (stringp efmt) efmt (or (plist-get efmt i)
+						   "%s\\,(%s)")))
+	     (if (string-match orgtbl-exp-regexp f)
+		 ;; exponential, format accordingly
+		 (setq f (format efm (match-string 1 f) (match-string 2 f))))
+	     ;; Apply standard format
+	     (format fm f))
+	   line
+	   " & ")   ; Field separator
+	  "\\\\")   ; Line separator
+	 rtn)))
+    
+    ;; Close the tabular environment?
+    (unless splicep (push "\\end{tabular}" rtn))
+    
+    ;; Concatenate the lines, to return a single block of text
+    (mapconcat 'identity (nreverse rtn) "\n")))
+
+(defun orgtbl-to-html (table params)
+  "Convert the orgtbl-mode TABLE to LaTeX.
+TABLE is a list, each entry either the symbol `hline' for a horizontal
+separator line, or a list of fields for that line.
+PARAMS is a property list of parameters that can influence the conversion.
+Currently this function recognizes the following parameters:
+
+:splice nil/t      When set to t, return only table body lines, don't wrap
+                   them into a <table> environment.  Default is nil.
+
+A number of standard parameters are always handled directly by
+`orgtbl-send-table'.  See manual."
+  (interactive)
+  (let* ((splicep (plist-get params :splice))
+	 html)
+    ;; Just call the formatter we already have
+    ;; We need to make text lines for it, so put the fields back together.
+    (setq html (org-format-org-table-html
+		(mapcar
+		 (lambda (x)
+		   (if (eq x 'hline)
+		       "|----+----|"
+		     (concat "| " (mapconcat 'identity x " | ") " |")))
+		 table)
+		splicep))
+    (if (string-match "\n+\\'" html)
+	(setq html (replace-match "" t t html)))
+    html))
+
+(defun orgtbl-to-texinfo (table params)
+  "Convert the orgtbl-mode TABLE to TeXInfo.
+TABLE is a list, each entry either the symbol `hline' for a horizontal
+separator line, or a list of fields for that line.
+PARAMS is a property list of parameters that can influence the conversion.
+Valid parameters are
+
+:splice nil/t      When set to t, return only table body lines, don't wrap
+                   them into a multitable environment.  Default is nil.
+
+:fmt fmt           A format to be used to wrap the field, should contain
+                   %s for the original field value.  For example, to wrap
+                   everything in @kbd{}, you could use :fmt \"@kbd{%s}\".
+                   This may also be a property list with column numbers and
+                   formats. for example :fmt (2 \"@kbd{%s}\" 4 \"@code{%s}\").
+
+:cf \"f1 f2..\"    The column fractions for the table.  Bye default these
+                   are computed automatically from the width of the columns
+                   under org-mode.
+
+Furthermore, a number of standard parameters are always handled directly
+by `orgtbl-send-table'.  See manual."
+  (interactive)
+  (let* ((splicep (plist-get params :splice))  ; do we need table header?
+	 (fmt (plist-get params :fmt))         ; General format
+	 (colfrac (plist-get params :cf))     ; Column fractions
+	 rtn                                   ; list collecting converted lines
+	 total line head i fm)
+    
+    (if (and (not splicep) (listp (car table)) (eq 'hline (nth 1 table)))
+	(setq head t))
+
+    ;; First check if we need to put the multitable environment ourselves
+    (unless splicep
+      (unless colfrac
+	(setq total (float (apply '+ org-table-last-column-widths))
+	      colfrac (mapconcat
+		       (lambda (x) (format "%.3f" (/ (float x) total)))
+		       org-table-last-column-widths " ")))
+      (push (concat "@multitable @columnfractions " colfrac) rtn))
+
+    ;; Loop over all lines
+    (while (setq line (pop table))
+      (if (eq line 'hline)
+	  ;; A horizontal separator line - TeXinfo cannot handle this
+	  nil
+	;; A normal line.  Convert the fields, push line onto the result list
+	(setq i 0)  ; counter for column, to access column-specific settings
+	(push
+	 (concat
+	  (if head (progn (setq head nil) "@headitem ") "@item ")
+	  (mapconcat
+	   (lambda (f)
+	     ;; First get the settings that apply here.
+	     (setq i (1+ i)
+		   fm (if (stringp fmt) fmt (or (plist-get fmt i) "%s")))
+	     (format fm f))
+	   line
+	   " @tab ")  ; Field separator
+	  "")
+	 rtn)))
+    (unless splicep (push "@end multitable" rtn))
+    (mapconcat 'identity (nreverse rtn) "\n")))
+
 ;;;; Link Stuff
 ;;;; Link Stuff
 
 
 ;;; Link abbreviations
 ;;; Link abbreviations
@@ -10047,7 +10421,7 @@ to be run from that hook to fucntion properly."
 		  (or headline ""))))
 		  (or headline ""))))
 	(insert tpl) (goto-char (point-min))
 	(insert tpl) (goto-char (point-min))
 	;; Simple %-escapes
 	;; Simple %-escapes
-	(while (re-search-forward "%\\([tTuTai]\\)" nil t)
+	(while (re-search-forward "%\\([tTuUai]\\)" nil t)
 	  (when (and initial (equal (match-string 0) "%i"))
 	  (when (and initial (equal (match-string 0) "%i"))
 	    (save-match-data
 	    (save-match-data
 	      (let* ((lead (buffer-substring
 	      (let* ((lead (buffer-substring
@@ -10098,7 +10472,7 @@ to be run from that hook to fucntion properly."
 ;;;###autoload
 ;;;###autoload
 (defun org-remember ()
 (defun org-remember ()
   "Call `remember'.  If this is already a remember buffer, re-apply template.
   "Call `remember'.  If this is already a remember buffer, re-apply template.
-If there is an active region, amke sure remember uses it as initial content
+If there is an active region, make sure remember uses it as initial content
 of the remember buffer."
 of the remember buffer."
   (interactive)
   (interactive)
   (if (eq org-finish-function 'remember-buffer)
   (if (eq org-finish-function 'remember-buffer)
@@ -11028,7 +11402,7 @@ are included in the output."
 	      (goto-char lspos)
 	      (goto-char lspos)
 	      (setq marker (org-agenda-new-marker))
 	      (setq marker (org-agenda-new-marker))
 	      (org-add-props txt props
 	      (org-add-props txt props
-		'org-marker marker 'org-hd-marker marker 'category category)
+		'org-marker marker 'org-hd-marker marker 'org-category category)
 	      (push txt rtn))
 	      (push txt rtn))
 	    ;; if we are to skip sublevels, jump to end of subtree
 	    ;; if we are to skip sublevels, jump to end of subtree
 	    (or org-tags-match-list-sublevels (org-end-of-subtree t))))))
 	    (or org-tags-match-list-sublevels (org-end-of-subtree t))))))
@@ -12487,7 +12861,8 @@ The following commands are available:
   ;; Make sure properties are removed when copying text
   ;; Make sure properties are removed when copying text
   (when (boundp 'buffer-substring-filters)
   (when (boundp 'buffer-substring-filters)
     (org-set-local 'buffer-substring-filters
     (org-set-local 'buffer-substring-filters
-		   (cons (lambda (x) (set-text-properties 0 (length x) nil x) x)
+		   (cons (lambda (x)
+                           (set-text-properties 0 (length x) nil x) x)
 			 buffer-substring-filters)))
 			 buffer-substring-filters)))
   (unless org-agenda-keep-modes
   (unless org-agenda-keep-modes
     (setq org-agenda-follow-mode org-agenda-start-with-follow-mode
     (setq org-agenda-follow-mode org-agenda-start-with-follow-mode
@@ -14022,7 +14397,7 @@ the documentation of `org-diary'."
 		     1)))
 		     1)))
 	(org-add-props txt props
 	(org-add-props txt props
 	  'org-marker marker 'org-hd-marker marker
 	  'org-marker marker 'org-hd-marker marker
-	  'priority priority 'category category)
+	  'priority priority 'org-category category)
 	(push txt ee)
 	(push txt ee)
 	(if org-agenda-todo-list-sublevels
 	(if org-agenda-todo-list-sublevels
 	    (goto-char (match-end 1))
 	    (goto-char (match-end 1))
@@ -14091,13 +14466,13 @@ the documentation of `org-diary'."
 	      (org-add-props txt nil
 	      (org-add-props txt nil
 		'face (if donep 'org-done 'org-warning)
 		'face (if donep 'org-done 'org-warning)
 		'undone-face 'org-warning 'done-face 'org-done
 		'undone-face 'org-warning 'done-face 'org-done
-		'category category 'priority (+ 100 priority))
+		'org-category category 'priority (+ 100 priority))
 	    (if scheduledp
 	    (if scheduledp
 		(org-add-props txt nil
 		(org-add-props txt nil
 		  'face 'org-scheduled-today
 		  'face 'org-scheduled-today
 		  'undone-face 'org-scheduled-today 'done-face 'org-done
 		  'undone-face 'org-scheduled-today 'done-face 'org-done
-		  'category category 'priority (+ 99 priority))
-	      (org-add-props txt nil 'priority priority 'category category)))
+		  'org-category category 'priority (+ 99 priority))
+	      (org-add-props txt nil 'priority priority 'org-category category)))
 	  (push txt ee))
 	  (push txt ee))
 	(outline-next-heading)))
 	(outline-next-heading)))
     (nreverse ee)))
     (nreverse ee)))
@@ -14148,7 +14523,7 @@ the documentation of `org-diary'."
 	  (setq priority 100000)
 	  (setq priority 100000)
 	  (org-add-props txt props
 	  (org-add-props txt props
 	    'org-marker marker 'org-hd-marker hdmarker 'face 'org-done
 	    'org-marker marker 'org-hd-marker hdmarker 'face 'org-done
-	    'priority priority 'category category
+	    'priority priority 'org-category category
 	    'undone-face 'org-warning 'done-face 'org-done)
 	    'undone-face 'org-warning 'done-face 'org-done)
 	  (push txt ee))
 	  (push txt ee))
 	(outline-next-heading)))
 	(outline-next-heading)))
@@ -14204,7 +14579,7 @@ the documentation of `org-diary'."
 		  'org-marker (org-agenda-new-marker pos)
 		  'org-marker (org-agenda-new-marker pos)
 		  'org-hd-marker (org-agenda-new-marker pos1)
 		  'org-hd-marker (org-agenda-new-marker pos1)
 		  'priority (+ (- 10 diff) (org-get-priority txt))
 		  'priority (+ (- 10 diff) (org-get-priority txt))
-		  'category category
+		  'org-category category
 		  'face face 'undone-face face 'done-face 'org-done)
 		  'face face 'undone-face face 'done-face 'org-done)
 		(push txt ee))))))
 		(push txt ee))))))
     ee))
     ee))
@@ -14257,7 +14632,7 @@ the documentation of `org-diary'."
 		  'org-marker (org-agenda-new-marker pos)
 		  'org-marker (org-agenda-new-marker pos)
 		  'org-hd-marker (org-agenda-new-marker pos1)
 		  'org-hd-marker (org-agenda-new-marker pos1)
 		  'priority (+ (- 5 diff) (org-get-priority txt))
 		  'priority (+ (- 5 diff) (org-get-priority txt))
-		  'category category)
+		  'org-category category)
 		(push txt ee))))))
 		(push txt ee))))))
     ee))
     ee))
 
 
@@ -14303,7 +14678,7 @@ the documentation of `org-diary'."
 		(setq txt org-agenda-no-heading-message))
 		(setq txt org-agenda-no-heading-message))
 	      (org-add-props txt props
 	      (org-add-props txt props
 		'org-marker marker 'org-hd-marker hdmarker
 		'org-marker marker 'org-hd-marker hdmarker
-		'priority (org-get-priority txt) 'category category)
+		'priority (org-get-priority txt) 'org-category category)
 	      (push txt ee)))
 	      (push txt ee)))
 	(goto-char pos)))
 	(goto-char pos)))
     ;; Sort the entries by expiration date.
     ;; Sort the entries by expiration date.
@@ -14420,7 +14795,7 @@ only the correctly processes TXT should be returned - this is used by
 
 
       ;; And finally add the text properties
       ;; And finally add the text properties
       (org-add-props rtn nil
       (org-add-props rtn nil
-	'category (downcase category) 'tags tags
+	'org-category (downcase category) 'tags tags
 	'prefix-length (- (length rtn) (length txt))
 	'prefix-length (- (length rtn) (length txt))
 	'time-of-day time-of-day
 	'time-of-day time-of-day
 	'dotime dotime))))
 	'dotime dotime))))
@@ -15084,7 +15459,7 @@ the new TODO state."
 		   (equal m hdmarker))
 		   (equal m hdmarker))
 	  (setq props (text-properties-at (point))
 	  (setq props (text-properties-at (point))
 		dotime (get-text-property (point) 'dotime)
 		dotime (get-text-property (point) 'dotime)
-		cat (get-text-property (point) 'category)
+		cat (get-text-property (point) 'org-category)
 		tags (get-text-property (point) 'tags)
 		tags (get-text-property (point) 'tags)
 		new (org-format-agenda-item "x" newhead cat tags dotime 'noprefix)
 		new (org-format-agenda-item "x" newhead cat tags dotime 'noprefix)
 		pl (get-text-property (point) 'prefix-length)
 		pl (get-text-property (point) 'prefix-length)
@@ -15111,6 +15486,8 @@ the new TODO state."
 	(beginning-of-line 0)))
 	(beginning-of-line 0)))
     (org-finalize-agenda)))
     (org-finalize-agenda)))
 
 
+;; FIXME: allow negative value for org-agenda-align-tags-to-column
+;; See the code in set-tags for the way to do this.
 (defun org-agenda-align-tags (&optional line)
 (defun org-agenda-align-tags (&optional line)
   "Align all tags in agenda items to `org-agenda-align-tags-to-column'."
   "Align all tags in agenda items to `org-agenda-align-tags-to-column'."
   (let ((buffer-read-only))
   (let ((buffer-read-only))
@@ -17415,8 +17792,9 @@ lang=\"%s\" xml:lang=\"%s\">
 	;; Need to use the code generator in table.el, with the original text.
 	;; Need to use the code generator in table.el, with the original text.
 	(org-format-table-table-html-using-table-generate-source olines)))))
 	(org-format-table-table-html-using-table-generate-source olines)))))
 
 
-(defun org-format-org-table-html (lines)
+(defun org-format-org-table-html (lines &optional splice)
   "Format a table into HTML."
   "Format a table into HTML."
+  ;; Get rid of hlines at beginning and end
   (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
   (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
   (setq lines (nreverse lines))
   (setq lines (nreverse lines))
   (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
   (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
@@ -17424,52 +17802,84 @@ lang=\"%s\" xml:lang=\"%s\">
   (when org-export-table-remove-special-lines
   (when org-export-table-remove-special-lines
     ;; Check if the table has a marking column.  If yes remove the
     ;; Check if the table has a marking column.  If yes remove the
     ;; column and the special lines
     ;; column and the special lines
-    (let* ((special
-	    (not
-	     (memq nil
-		   (mapcar
-		    (lambda (x)
-		      (or (string-match "^[ \t]*|-" x)
-			  (string-match "^[ \t]*| *\\([#!$*_^ ]\\) *|" x)))
-		    lines)))))
-      (if special
-	  (setq lines
-		(delq nil
-		      (mapcar
-		       (lambda (x)
-			 (if (string-match "^[ \t]*| *[!_^] *|" x)
-			     nil ; ignore this line
-			   (and (or (string-match "^[ \t]*|-+\\+" x)
-				    (string-match "^[ \t]*|[^|]*|" x))
-				(replace-match "|" t t x))))
-		       lines))))))
+    (setq lines (org-table-clean-before-export lines)))
 
 
   (let ((head (and org-export-highlight-first-table-line
   (let ((head (and org-export-highlight-first-table-line
 		   (delq nil (mapcar
 		   (delq nil (mapcar
 			      (lambda (x) (string-match "^[ \t]*|-" x))
 			      (lambda (x) (string-match "^[ \t]*|-" x))
 			      (cdr lines)))))
 			      (cdr lines)))))
-	line fields html)
-    (setq html (concat org-export-html-table-tag "\n"))
+	(nlines 0) fnum i align al2
+	tbopen line fields html)
+    (if splice (setq head nil))
+    (unless splice (push (if head "<thead>" "<tbody>") html))
+    (setq tbopen t)
     (while (setq line (pop lines))
     (while (setq line (pop lines))
       (catch 'next-line
       (catch 'next-line
 	(if (string-match "^[ \t]*|-" line)
 	(if (string-match "^[ \t]*|-" line)
 	    (progn
 	    (progn
+	      (unless splice 
+		(push (if head "</thead>" "</tbody>") html)
+		(if lines (push "<tbody>" html) (setq tbopen nil)))
 	      (setq head nil)   ;; head ends here, first time around
 	      (setq head nil)   ;; head ends here, first time around
 	      ;; ignore this line
 	      ;; ignore this line
 	      (throw 'next-line t)))
 	      (throw 'next-line t)))
 	;; Break the line into fields
 	;; Break the line into fields
 	(setq fields (org-split-string line "[ \t]*|[ \t]*"))
 	(setq fields (org-split-string line "[ \t]*|[ \t]*"))
-	(setq html (concat
-		    html
-		    "<tr>"
-		    (mapconcat (lambda (x)
-				 (if head
-				     (concat "<th>" x "</th>")
-				   (concat "<td>" x "</td>")))
-			       fields "")
-		    "</tr>\n"))))
-    (setq html (concat html "</table>\n"))
-    html))
+	(unless fnum (setq fnum (make-vector (length fields) 0)))
+	(setq nlines (1+ nlines) i -1)
+	(push (concat "<tr>"
+		      (mapconcat
+		       (lambda (x)
+			 (setq i (1+ i))
+			 (if (and (< i nlines)
+				  (string-match org-table-number-regexp x))
+			     (incf (aref fnum i)))
+			 (if head
+			     (concat "<th>" x "</th>")
+			   (concat "<td>" x "</td>")))
+		       fields "")
+		      "</tr>")
+	      html)))
+    (unless splice (if tbopen (push "</tbody>" html)))
+    (unless splice (push "</table>\n" html))
+    (setq html (nreverse html))
+    (unless splice
+      (setq align (mapcar
+		   (lambda (x)
+		     (if (> (/ (float x) nlines) org-table-number-fraction)
+			 "right" "left"))
+		   fnum))
+      ;; Put in COL tags with the alignment (unfortuntely often ignored...)
+      (push (mapconcat
+	     (lambda (x)
+	       (format "<COL align=\"%s\">"
+		       (if (> (/ (float x) nlines) org-table-number-fraction)
+			   "right" "left")))
+	     fnum "")
+	    html)
+      (push org-export-html-table-tag html))
+    (concat (mapconcat 'identity html "\n") "\n")))
+
+(defun org-table-clean-before-export (lines)
+  "Check if the table has a marking column.
+If yes remove the column and the special lines."
+  (if (memq nil
+	    (mapcar
+	     (lambda (x) (or (string-match "^[ \t]*|-" x)
+			     (string-match "^[ \t]*| *\\([#!$*_^ /]\\) *|" x)))
+	     lines))
+      (progn
+	(setq org-table-clean-did-remove-column-1 nil)
+	lines)
+    (setq org-table-clean-did-remove-column-1 t)
+    (delq nil
+	  (mapcar
+	   (lambda (x) (if (string-match "^[ \t]*| *[!_^/] *|" x)
+			   nil ; ignore this line
+			 (and (or (string-match "^[ \t]*|-+\\+" x)
+				  (string-match "^[ \t]*|[^|]*|" x))
+			      (replace-match "|" t t x))))
+	   lines))))
 
 
 (defun org-fake-empty-table-line (line)
 (defun org-fake-empty-table-line (line)
   "Replace everything except \"|\" with spaces."
   "Replace everything except \"|\" with spaces."
@@ -19314,6 +19724,7 @@ This function should be run in the `org-after-todo-state-change-hook'."
       (setq org-log-post-message msg)
       (setq org-log-post-message msg)
       (message msg))))
       (message msg))))
 
 
+
 ;;;; Finish up
 ;;;; Finish up
 
 
 (provide 'org)
 (provide 'org)

二進制
org.pdf


+ 274 - 20
org.texi

@@ -3,7 +3,7 @@
 @setfilename ../info/org
 @setfilename ../info/org
 @settitle Org Mode Manual
 @settitle Org Mode Manual
 
 
-@set VERSION 4.64
+@set VERSION 4.65
 @set DATE February 2007
 @set DATE February 2007
 
 
 @dircategory Emacs
 @dircategory Emacs
@@ -296,8 +296,15 @@ Interaction with other packages
 Extensions, Hooks and Hacking
 Extensions, Hooks and Hacking
 
 
 * Extensions::                  Existing 3rd-part extensions
 * Extensions::                  Existing 3rd-part extensions
+* Tables in arbitrary syntax::  Orgtbl for LaTeX and other programs
 * Dynamic blocks::              Automatically filled blocks
 * Dynamic blocks::              Automatically filled blocks
-* Special agenda views::        
+* Special agenda views::        Customized views
+
+Tables in arbitrary syntax
+
+* Radio tables::                Sending and receiving
+* A LaTeX example::             Step by step, almost a tutorial
+* Translator functions::        Copy and modify
 
 
 @end detailmenu
 @end detailmenu
 @end menu
 @end menu
@@ -363,7 +370,8 @@ example as:
 
 
 Org-mode's automatic, context sensitive table editor with spreadsheet
 Org-mode's automatic, context sensitive table editor with spreadsheet
 capabilities can be integrated into any major mode by activating the
 capabilities can be integrated into any major mode by activating the
-minor Orgtbl-mode.
+minor Orgtbl-mode.  Using a translation step, it can be used to maintain
+tables in arbitray file types, for example in LaTeX.
 
 
 @cindex FAQ
 @cindex FAQ
 There is a website for Org-mode which provides links to the newest
 There is a website for Org-mode which provides links to the newest
@@ -373,6 +381,7 @@ questions (FAQ), links to tutorials etc.  This page is located at
 
 
 @page
 @page
 
 
+
 @node Installation, Activation, Summary, Introduction
 @node Installation, Activation, Summary, Introduction
 @section Installation
 @section Installation
 @cindex installation
 @cindex installation
@@ -1342,6 +1351,12 @@ example in mail mode, use
 (add-hook 'mail-mode-hook 'turn-on-orgtbl)
 (add-hook 'mail-mode-hook 'turn-on-orgtbl)
 @end lisp
 @end lisp
 
 
+Furthermore, with some special setup, it is possible to maintain tables
+in arbitrary syntax with Orgtbl-mode.  For example, it is possible to
+construct LaTeX tables with the underlying ease and power of
+Orgtbl-mode, including spreadsheet capabulities.  For details, see
+@ref{Tables in arbitrary syntax}.
+
 @node The spreadsheet,  , orgtbl-mode, Tables
 @node The spreadsheet,  , orgtbl-mode, Tables
 @section The spreadsheet
 @section The spreadsheet
 @cindex calculations, in tables
 @cindex calculations, in tables
@@ -1634,6 +1649,15 @@ also apply the new formulas to the entire table.
 @kindex C-c C-q
 @kindex C-c C-q
 @item C-c C-q
 @item C-c C-q
 Exit the buffer without installing changes.
 Exit the buffer without installing changes.
+@kindex @key{TAB}
+@item @key{TAB}
+Pretty-print or indent lisp formula at point.  When in a line containing
+a lisp formula, format the formula according to Emacs Lisp rules.
+Another @key{TAB} collapses the formula back again.  In the open
+formula, @key{TAB} re-indents just like in Emacs-lisp-mode.
+@kindex M-@key{TAB}
+@item M-@key{TAB}
+Complete Lisp symbols, just like in Emacs-lisp-mode.
 @kindex S-@key{up}
 @kindex S-@key{up}
 @kindex S-@key{down}
 @kindex S-@key{down}
 @item S-@key{up}/@key{down}
 @item S-@key{up}/@key{down}
@@ -1779,6 +1803,9 @@ recalculation slows down editing too much.
 Unmarked lines are exempt from recalculation with @kbd{C-u C-c *}.
 Unmarked lines are exempt from recalculation with @kbd{C-u C-c *}.
 All lines that should be recalculated should be marked with @samp{#}
 All lines that should be recalculated should be marked with @samp{#}
 or @samp{*}.
 or @samp{*}.
+@item /
+Do not export this line.  Useful for lines that contain the narrowing
+@samp{<N>} markers.
 @end table
 @end table
 
 
 Finally, just to whet your appetite on what can be done with the
 Finally, just to whet your appetite on what can be done with the
@@ -2590,7 +2617,7 @@ anywhere in the file:
 #+TYP_TODO: Fred Sara Lucy Mike DONE
 #+TYP_TODO: Fred Sara Lucy Mike DONE
 @end example
 @end example
 
 
-@cindex Completion, of option keywords
+@cindex completion, of option keywords
 @kindex M-@key{TAB}
 @kindex M-@key{TAB}
 @noindent To make sure you are using the correct keyword, type
 @noindent To make sure you are using the correct keyword, type
 @samp{#+} into the buffer and then use @kbd{M-@key{TAB}} completion.
 @samp{#+} into the buffer and then use @kbd{M-@key{TAB}} completion.
@@ -3059,8 +3086,8 @@ format is shorter, things do work as expected.
 @node Repeating items, Progress logging, Custom time format, Timestamps
 @node Repeating items, Progress logging, Custom time format, Timestamps
 @section Repeating items
 @section Repeating items
 @cindex TODO items, repeating
 @cindex TODO items, repeating
-@cindex Deadlines, repeating
-@cindex Scheduling, repeating
+@cindex deadlines, repeating
+@cindex scheduling, repeating
 
 
 Org-mode integrates with the Emacs calendar and diary to display cyclic
 Org-mode integrates with the Emacs calendar and diary to display cyclic
 appointments, anniversaries and other special entries in the agenda
 appointments, anniversaries and other special entries in the agenda
@@ -5935,12 +5962,14 @@ Org-mode.
 
 
 @menu
 @menu
 * Extensions::                  Existing 3rd-part extensions
 * Extensions::                  Existing 3rd-part extensions
+* Tables in arbitrary syntax::  Orgtbl for LaTeX and other programs
 * Dynamic blocks::              Automatically filled blocks
 * Dynamic blocks::              Automatically filled blocks
-* Special agenda views::        
+* Special agenda views::        Customized views
 @end menu
 @end menu
 
 
-@node Extensions, Dynamic blocks, Extensions and Hacking, Extensions and Hacking
+@node Extensions, Tables in arbitrary syntax, Extensions and Hacking, Extensions and Hacking
 @section Third-party extensions for Org-mode
 @section Third-party extensions for Org-mode
+@cindex extension, third-party
 
 
 The following extensions for Org-mode have been written by other people:
 The following extensions for Org-mode have been written by other people:
 
 
@@ -5948,7 +5977,7 @@ The following extensions for Org-mode have been written by other people:
 @cindex @file{org-publish.el}
 @cindex @file{org-publish.el}
 @item @file{org-publish.el} by David O'Toole
 @item @file{org-publish.el} by David O'Toole
 This package provides facilities for publishing related sets of Org-mode
 This package provides facilities for publishing related sets of Org-mode
-files together with linked files like images as a webpages.  It is
+files together with linked files like images as webpages.  It is
 highly configurable and can be used for other publishing purposes as
 highly configurable and can be used for other publishing purposes as
 well.  As of Org-mode version 4.30, @file{org-publish.el} is part of the
 well.  As of Org-mode version 4.30, @file{org-publish.el} is part of the
 Org-mode distribution.  It is not yet part of Emacs, however, a delay
 Org-mode distribution.  It is not yet part of Emacs, however, a delay
@@ -5980,8 +6009,228 @@ Translates Org-mode files into something readable by
 Remind. @url{http://www.cognition.ens.fr/~guerry/u/org2rem.el}.
 Remind. @url{http://www.cognition.ens.fr/~guerry/u/org2rem.el}.
 @end table
 @end table
 
 
-@node Dynamic blocks, Special agenda views, Extensions, Extensions and Hacking
+@page
+
+@node Tables in arbitrary syntax, Dynamic blocks, Extensions, Extensions and Hacking
+@section Tables in arbitrary syntax
+@cindex tables, in other modes
+@cindex orgtbl-mode
+
+Since Orgtbl-mode can be used as a minor mode in arbitrary buffers, a
+frequent feature request has been to make it work with native tables in
+specific languages, for example LaTeX.  However, this is extremely hard
+to do in a general way, would lead to a customization nightmare, and
+would take away much of the simplicity of the Orgtbl-mode table editor.
+
+This appendix describes different approach.  We keep the Orgtbl-mode
+table in its native format (the @i{source table}), and use a custom
+function to @i{translate} the table to the correct syntax, and to
+@i{install} it in the right location (the @i{target table}).  This puts
+the burden of writing conversion functions on the user, but it allows
+for a very flexible system.
+
+@menu
+* Radio tables::                Sending and receiving
+* A LaTeX example::             Step by step, almost a tutorial
+* Translator functions::        Copy and modify
+@end menu
+
+@node Radio tables, A LaTeX example, Tables in arbitrary syntax, Tables in arbitrary syntax
+@subsection Radio tables
+@cindex radio tables
+
+To define the location of the target table, you first need to create two
+lines that are comments in the current mode, but contain magic words for
+Orgtbl-mode to find.  Orgtbl-mode will insert the translated table
+between these lines, replacing whatever was there before.  For example:
+
+@example
+/* BEGIN RECEIVE ORGTBL table_name */
+/* END RECEIVE ORGTBL table_name */
+@end example
+
+@noindent
+Just above the source table, we put a special line that tells
+Orgtbl-mode how to translate this table and where to install it.  For
+example:
+@example
+#+ORGTBL: SEND table_name translation_function arguments....
+@end example
+
+@noindent
+@code{table_name} is the reference name for the table that is also used
+in the receiver lines. @code{translation_function} is the Lisp function
+that does the translation.  Furthermore, the line can contain a list of
+arguments (alternating key and value) at the end.  The arguments will be
+passed as a property list to the translation function for
+interpretation.  However, a few standard parameters are already
+recognized and acted upon before the translation function is called:
+
+@table @code
+@item :skip N
+Skip the first N lines of the table. Hlines do count!
+@item :skipcols (n1 n2 ...)
+List of columns that should be skipped.  If the table has a column with
+calculation marks, that column is automatically discarded as well.
+Please note that the translator function sees the table @emph{after} the
+removal of these columns, the function never knows that there have been
+additional columns.
+@end table
+
+@noindent
+The one problem remaining is how to keep the source table in the buffer
+without disturbing the normal workings of the file, for example during
+compilation of a C file or processing of a LaTeX file.  There are a
+number of different solutions:
+
+@itemize @bullet
+@item
+The table could be placed in a block comment if that is supported by the
+language.  For example, in C-mode you could wrap the table between
+@samp{/*} and @samp{*/} lines.
+@item 
+Sometimes it is possible to put the table after some kind of @i{END}
+statement, for example @samp{\bye} in TeX and @samp{\end@{document@}}
+in LaTeX.
+@item
+If all else fails@footnote{In principle the source table could also be
+in a separate file, but so far this is not implemented.}, you can just
+comment the table line by line whenever you want to process the file,
+and uncomment it whenever you need to edit the table.  The command
+@kbd{M-x orgtbl-toggle-comment} does make this a viable option, in
+particular if you bind it to a key.
+@end itemize
+
+@node A LaTeX example, Translator functions, Radio tables, Tables in arbitrary syntax
+@subsection A LaTeX example
+@cindex LaTeX, and orgtbl-mode
+
+The best way to wrap the source table in LaTeX is to use the
+@code{comment} environment provided by @file{comment.sty}.  It has to be
+activated by placing @code{\usepackage@{comment@}} into the document
+header.  Orgtbl-mode can insert a radio table skeleton@footnote{By
+default this works only for LaTeX, HTML, and TeXInfo.  Configure the
+variable @code{orgtbl-radio-tables} to install templates for other
+modes.}  with the command @kbd{M-x orgtbl-insert-radio-table}.  You will
+be prompted for a table name, lets say we use @samp{salesfigures}.  You
+will then get the following template:
+
+@example
+% BEGIN RECEIVE ORGTBL salesfigures
+% END RECEIVE ORGTBL salesfigures
+\begin@{comment@}
+#+ORGTBL: SEND salesfigures orgtbl-to-latex
+| | |
+\end@{comment@}
+@end example
+
+@noindent
+The @code{#+ORGTBL: SEND} line tells orgtbl-mode to use the function
+@code{orgtbl-to-latex} to convert the table into LaTeX and to put it
+into the receiver location with name @code{salesfigures}.  You may now
+fill in the table, feel free to use the spreadsheet features@footnote{If
+the @samp{#+TBLFM} line contains an odd number of dollar characters,
+this may cause problems with font-lock in latex-mode.  As shown in the
+example you can fix this by adding an extra line inside the
+@code{comment} environment that is used to balance the dollar
+expressions.  If you are using AUCTeX with the font-latex library, a
+much better solution is to add the @code{comment} environment to the
+variable @code{LaTeX-verbatim-environments}.}:
+
+@example
+% BEGIN RECEIVE ORGTBL salesfigures
+% END RECEIVE ORGTBL salesfigures
+\begin@{comment@}
+#+ORGTBL: SEND salesfigures orgtbl-to-latex
+| Month | Days | Nr sold | per day |
+|-------+------+---------+---------|
+| Jan   |   23 |      55 |     2.4 |
+| Feb   |   21 |      16 |     0.8 |
+| March |   22 |     278 |    12.6 |
+#+TBLFM: $4=$3/$2;%.1f
+% $ (optional extra dollar to keep font-lock happy, see footnote)
+\end@{comment@}
+@end example
+
+@noindent
+When you are done, press @kbd{C-c C-c} in the table to get the converted
+table inserted between the two marker lines.
+
+Now lets assume you want to make the table header by hand, because you
+want to control how columns are aligned etc.  In this case we make sure
+that the table translator does skip the first 2 lines, and tell the
+command to work as a @i{splice}, i.e. to not produce header and footer
+commands of the table:
+
+@example
+\begin@{tabular@}@{lrrr@}
+Month & \multicolumn@{1@}@{c@}@{Days@} & Nr.\ sold & per day\\
+% BEGIN RECEIVE ORGTBL salesfigures
+% END RECEIVE ORGTBL salesfigures
+\end@{tabular@}
+%
+\begin@{comment@}
+#+ORGTBL: SEND salesfigures orgtbl-to-latex :splice t :skip 2
+| Month | Days | Nr sold | per day |
+|-------+------+---------+---------|
+| Jan   |   23 |      55 |     2.4 |
+| Feb   |   21 |      16 |     0.8 |
+| March |   22 |     278 |    12.6 |
+#+TBLFM: $4=$3/$2;%.1f
+\end@{comment@}
+@end example
+
+The LaTeX translator function @code{orgtbl-to-latex} is already part of
+Orgtbl-mode.  It uses a @code{tabular} environment to typeset the table
+and marks horizontal lines with @code{\hline}.  Furthermore, it
+interprets the following parameters:
+
+@table @code
+@item :splice nil/t
+When set to t, return only table body lines, don't wrap them into a
+tabular environment.  Default is nil.
+
+@item :fmt fmt
+A format to be used to wrap the field, should contain @code{%s} for the
+original field value.  For example, to wrap each field value in dollars,
+you could use @code{:fmt "$%s$"}.  This may also be a property list with
+column numbers and formats. for example @code{:fmt (2 "$%s$" 4 "%s%%")}.
+
+@item :efmt efmt
+Use this format to print numbers with exponentials.  The format should
+have @code{%s} twice for inserting mantissa and exponent, for example
+@code{"%s\\times10^@{%s@}"}.  The default is @code{"%s\\,(%s)"}.  This
+may also be a property list with column numbers and formats, for example
+@code{:efmt (2 "$%s\\times10^@{%s@}$" 4 "$%s\\cdot10^@{%s@}$")}.  After
+@code{efmt} has been applied to a value, @code{fmt} will also be
+applied.
+@end table
+
+@node Translator functions,  , A LaTeX example, Tables in arbitrary syntax
+@subsection Translator functions
+@cindex HTML, and orgtbl-mode
+@cindex translator function
+
+Orgtbl-mode has several translator functions built-in:
+@code{orgtbl-to-latex}, @code{orgtbl-to-html}, and
+@code{orgtbl-to-texinfo}.  For deatils on each of them, please check
+the corresponding documentation strings.
+
+In order to write your own translator function, start by looking at
+@code{orgtbl-to-latex} which is well documented.  Basically you have to
+write a function that takes two arguments.  The first argument is the
+table, a list of lines, each line either the symbol @code{hline} or a
+list of fields.  The second argument is a property list that will
+contain all parameters specified in the @samp{#+ORGTBL: SEND} line.
+Orgtbl-mode always handles the @code{:skip} and @code{:skipcols}
+parameters, but your translator function may use any number of
+additional parameters.  If you write a generally useful translator,
+please post it on @code{emacs-orgmode@@gnu.org} so that others can
+benefit from your work.
+
+@node Dynamic blocks, Special agenda views, Tables in arbitrary syntax, Extensions and Hacking
 @section Dynamic blocks
 @section Dynamic blocks
+@cindex dynamic blocks
 
 
 Org-mode documents can contain @emph{dynamic blocks}.  These are
 Org-mode documents can contain @emph{dynamic blocks}.  These are
 specially marked regions that are updated by some user-written
 specially marked regions that are updated by some user-written
@@ -6041,6 +6290,7 @@ written in a way that is does nothing in buffers that are not in Org-mode.
 
 
 @node Special agenda views,  , Dynamic blocks, Extensions and Hacking
 @node Special agenda views,  , Dynamic blocks, Extensions and Hacking
 @section Special Agenda Views
 @section Special Agenda Views
+@cindex agenda views, user-defined
 
 
 Org-mode provides a special hook that can be used to narrow down the
 Org-mode provides a special hook that can be used to narrow down the
 selection made by any of the agenda views.  You may specify a function
 selection made by any of the agenda views.  You may specify a function
@@ -6099,17 +6349,21 @@ MATCH is being ignored."
 @cindex thanks
 @cindex thanks
 
 
 Org-mode was borne in 2003, out of frustration over the user interface
 Org-mode was borne in 2003, out of frustration over the user interface
-of the Emacs outline-mode.  All I initially wanted was to make working
-with an outline tree possible without having to remember more than 10
-commands just for hiding and unhiding parts of the outline tree, and to
-allow to restructure a tree easily.  Visibility cycling and structure
-editing were originally implemented in the package
+of the Emacs outline-mode.  I was trying to organize my notes and
+projects, and using Emacs seemed to be the natural way to go.  However,
+having to remember eleven different commands with two or three keys per
+command, only to hide and unhide parts of the outline tree, that seemed
+entirely unacceptable to me.  Also, when using outlines to take notes, I
+constantly want to restructure the tree, organizing it parallel to my
+thoughts and plans.  @emph{Visibility cycling} and @emph{structure
+editing} were originally implemented in the package
 @file{outline-magic.el}, but quickly moved to the more general
 @file{outline-magic.el}, but quickly moved to the more general
-@file{org.el}.  TODO entries, basic time stamps, and table support were
-added next, and highlight the two main goals that Org-mode still has
-today: To create a new, outline-based, plain text mode with innovative
-and intuitive editing features, and to incorporate project planning
-functionality directly into a notes file.
+@file{org.el}.  As this environment became comfortable for project
+planning, the next step was adding @emph{TODO entries}, basic @emph{time
+stamps}, and @emph{table support}.  These areas highlight the two main
+goals that Org-mode still has today: To create a new, outline-based,
+plain text mode with innovative and intuitive editing features, and to
+incorporate project planning functionality directly into a notes file.
 
 
 Since the first release, hundreds of emails to me or on
 Since the first release, hundreds of emails to me or on
 @code{emacs-orgmode@@gnu.org} have provided a constant stream of bug
 @code{emacs-orgmode@@gnu.org} have provided a constant stream of bug

二進制
orgcard.pdf


+ 1 - 1
orgcard.tex

@@ -1,5 +1,5 @@
 % Reference Card for Org Mode
 % Reference Card for Org Mode
-\def\orgversionnumber{4.64}
+\def\orgversionnumber{4.65}
 \def\year{2007}
 \def\year{2007}
 %
 %
 %**start of header
 %**start of header