* [BUG] text cell contents have extra parentheses when used in formulas [9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/)] [not found] <CAF_DUeG_W_40Ws_8Z+0Q=f_2yzT+cE9aoUxDbLnnb1n7-HDbaQ.ref@mail.gmail.com> @ 2023-04-22 14:20 ` Jeff Trull 2023-04-23 10:50 ` Ihor Radchenko 0 siblings, 1 reply; 3+ messages in thread From: Jeff Trull @ 2023-04-22 14:20 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 7923 bytes --] Expectation: when using cell contents as strings in a formula, the strings should contain exactly the cell's text contents Actual: the resulting string is wrapped in parentheses I can find nothing in the documentation that suggests this is expected, and it is quite unintuitive if you want to (for example) filter on a column. #+TITLE: text formula repro | Key | Value | |-----+--------------| | A | [40, 65, 41] | | B | [40, 66, 41] | #+TBLFM: $2="$1" Here you can see that the contents of the Key column were wrapped in parentheses (ASCII 40 and 41) when turned into strings. Emacs : GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0) of 2022-10-14 Package: Org mode version 9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/) current state: ============== (setq org-link-elisp-confirm-function 'yes-or-no-p org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar" org-bibtex-headline-format-function #[257 "\300 \236A\207" [:title] 3 "\n\n(fn ENTRY)"] org-persist-after-read-hook '(org-element--cache-persist-after-read) org-re-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js@3.6.0" org-export-before-parsing-hook '(org-attach-expand-links) org-cycle-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-archive-hook '(org-attach-archive-delete-maybe) org-ascii-format-drawer-function #[771 " \207" [] 4 "\n\n(fn NAME CONTENTS WIDTH)"] org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-show-empty-lines org-cycle-optimize-window-after-visibility-change org-cycle-display-inline-images) org-latex-listings-options '(("basicstyle" "\\footnotesize\\ttfamily") ("showstringspaces" "false") ("breaklines" "true")) org-persist-before-read-hook '(org-element--cache-persist-before-read) org-mode-hook '(#[0 "\301\211 \207" [imenu-create-index-function org-imenu-get-tree] 2] org-superstar-mode org-tempo-setup (lambda nil (electric-indent-local-mode -1)) #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-fold-show-all append local] 5] #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-eldoc-load) org-babel-load-languages '((emacs-lisp . t) (dot . t) (ditaa . t) (shell . t)) org-latex-format-drawer-function #[514 "\207" [] 3 "\n\n(fn _ CONTENTS)"] org-latex-format-headline-function 'org-latex-format-headline-default-function org-confirm-shell-link-function 'yes-or-no-p org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME CONTENTS)"] outline-isearch-open-invisible-function 'outline-isearch-open-invisible org-latex-classes '(("beamer" "\\documentclass[11pt,aspectratio=169]{beamer}\n \\usenavigationsymbolstemplate{} % no navigation bar\n \\beamertemplateballitem % items have little balls" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("article" "\\documentclass[11pt]{article}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) ("report" "\\documentclass[11pt]{report}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("book" "\\documentclass[11pt]{book}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ) org-agenda-before-write-hook '(org-agenda-add-entry-text) org-latex-packages-alist '(("" "moresize") ("" "fancyvrb") ("" "inconsolata") ("" "tikz") ("" "color") ("" "listings")) org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer) org-confirm-elisp-link-function 'yes-or-no-p org-latex-src-block-backend t org-ditaa-eps-jar-path "/home/jet/.config/emacs/elpa/contrib/scripts/DitaaEps.jar" org-structure-template-alist '(("n" . "notes") ("a" . "export ascii") ("c" . "center") ("C" . "comment") ("e" . "example") ("E" . "export") ("h" . "export html") ("l" . "export latex") ("q" . "quote") ("s" . "src") ("v" . "verse")) org-speed-command-hook '(org-speed-command-activate org-babel-speed-command-activate) org-html-format-inlinetask-function 'org-html-format-inlinetask-default-function org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default org-export-backends '(ascii html icalendar latex md confluence re-reveal) org-confirm-babel-evaluate nil org-fold-core-isearch-open-function 'org-fold--isearch-reveal org-re-reveal-title-slide "<h2>%t</h2><h2>%a</h2><h2>%d</h2>" org-latex-format-inlinetask-function 'org-latex-format-inlinetask-default-function org-persist-before-write-hook '(org-element--cache-persist-before-write) org-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-link-shell-confirm-function 'yes-or-no-p org-babel-pre-tangle-hook '(save-buffer) org-agenda-loop-over-headlines-in-active-region nil org-occur-hook '(org-first-headline-recenter) org-metadown-hook '(org-babel-pop-to-session-maybe) org-link-parameters '(("attachment" :follow org-attach-follow :complete org-attach-complete-link) ("eww" :follow org-eww-open :store org-eww-store-link) ("rmail" :follow org-rmail-open :store org-rmail-store-link) ("mhe" :follow org-mhe-open :store org-mhe-store-link) ("irc" :follow org-irc-visit :store org-irc-store-link :export org-irc-export) ("info" :follow org-info-open :export org-info-export :store org-info-store-link :insert-description org-info-description-as-command) ("gnus" :follow org-gnus-open :store org-gnus-store-link) ("docview" :follow org-docview-open :export org-docview-export :store org-docview-store-link) ("bibtex" :follow org-bibtex-open :store org-bibtex-store-link) ("bbdb" :follow org-bbdb-open :export org-bbdb-export :complete org-bbdb-complete-link :store org-bbdb-store-link) ("w3m" :store org-w3m-store-link) ("doi" :follow org-link-doi-open :export org-link-doi-export) ("id" :follow org-id-open) ("file+sys") ("file+emacs") ("shell" :follow org-link--open-shell) ("news" :follow #[514 "\301\300\302 Q \"\207" ["news" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("mailto" :follow #[514 "\301\300\302 Q \"\207" ["mailto" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("https" :follow #[514 "\301\300\302 Q \"\207" ["https" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("http" :follow #[514 "\301\300\302 Q \"\207" ["http" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("ftp" :follow #[514 "\301\300\302 Q \"\207" ["ftp" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("help" :follow org-link--open-help :store org-link--store-help) ("file" :complete org-link-complete-file) ("elisp" :follow org-link--open-elisp)) org-html-format-headline-function 'org-html-format-headline-default-function org-metaup-hook '(org-babel-load-in-session-maybe) org-tab-before-tab-emulation-hook '(org-tempo-complete-tag) ) [-- Attachment #2: Type: text/html, Size: 10439 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [BUG] text cell contents have extra parentheses when used in formulas [9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/)] 2023-04-22 14:20 ` [BUG] text cell contents have extra parentheses when used in formulas [9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/)] Jeff Trull @ 2023-04-23 10:50 ` Ihor Radchenko 2023-04-23 19:57 ` Ihor Radchenko 0 siblings, 1 reply; 3+ messages in thread From: Ihor Radchenko @ 2023-04-23 10:50 UTC (permalink / raw) To: Jeff Trull; +Cc: emacs-orgmode Jeff Trull <edaskel@att.net> writes: > Expectation: when using cell contents as strings in a formula, the > strings should contain exactly the cell's text contents > > Actual: the resulting string is wrapped in parentheses This is actually expected, although surprising. > I can find nothing in the documentation that suggests this is expected, > and it is quite unintuitive if you want to (for example) filter on > a column. In short, do not use ". For filtering, see 3.5.7 Lookup functions. > #+TITLE: text formula repro > > | Key | Value | > |-----+--------------| > | A | [40, 65, 41] | > | B | [40, 66, 41] | > #+TBLFM: $2="$1" > > Here you can see that the contents of the Key column were wrapped in > parentheses (ASCII 40 and 41) when turned into strings. If you turn formula debugger on (M-x org-table-toggle-formula-debugger), you will see the following (I also added extra explanations): Substitution history of formula Orig: "$1" ;; begin calculation of $1 field value $xyz-> "$1" ;; after handling relative references @r$c-> "$1" ;; after handling cell references $1-> "(A)" ;; after handling column references; the (...) is added ;; because of Calc syntax to ensure that values inside ;; cell are grouped. There is no notion of strings in GNU ;; Calc (AFAIK). So, (...) grouping always represents ;; algebraic Calc expression. Result: [40, 65, 41] ;; (calc-eval "\"(A)\"") Format: NONE Final: [40, 65, 41] As you can see, we passed the formula to GNU Calc. However, "foo" in GNU calc is nothing but a vector of characters. So, $2="$1" is not what you anticipated. You may refer to 3.5.2 Formula syntax for Calc where we put a reference to GNU Calc manual. It is out of scope of Org manual to describe how GNU Calc works. Do note that an alternative formula syntax is using Elisp (see 3.5.3 Emacs Lisp forms as formulas). You can use that syntax if you prefer it over GNU Calc. Canceled. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [BUG] text cell contents have extra parentheses when used in formulas [9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/)] 2023-04-23 10:50 ` Ihor Radchenko @ 2023-04-23 19:57 ` Ihor Radchenko 0 siblings, 0 replies; 3+ messages in thread From: Ihor Radchenko @ 2023-04-23 19:57 UTC (permalink / raw) To: Jeff Trull; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: >> #+TITLE: text formula repro >> >> | Key | Value | >> |-----+--------------| >> | A | [40, 65, 41] | >> | B | [40, 66, 41] | >> #+TBLFM: $2="$1" >> >> Here you can see that the contents of the Key column were wrapped in >> parentheses (ASCII 40 and 41) when turned into strings. > > If you turn formula debugger on (M-x org-table-toggle-formula-debugger), > you will see the following (I also added extra explanations): > ... > $1-> "(A)" ;; after handling column references; the (...) is added > ;; because of Calc syntax to ensure that values inside > ;; cell are grouped. There is no notion of strings in GNU > ;; Calc (AFAIK). So, (...) grouping always represents > ;; algebraic Calc expression. > Result: [40, 65, 41] ;; (calc-eval "\"(A)\"") After looking closer, the code wrapping cell value into (...) is actually not necessarily correct. The parenthesis wrapping has been introduced in e7e5e25100246e5eab3a36034ac2de578dabd02f Author: Carsten Dominik <carsten.dominik@gmail.com> Fix bug with algebraic evaluation in tables. There was a problem that complex fields need a pair of parentheses around them. For example, if one field is "a a" and another field is "a+b", multiplication of the two gave "a^3+b" instead of "a^3+a^2 b". Now variable replacement puts extra parenthesis around values. ---- However, in a way, unconditional wrapping of cell value in parentheses is against how Org table formulas intuitively work - references are replaced by appropriate cell values. Wrapping a cell value in (...) only makes sense as long as algebraic operations are considered. However, when cell value is intentionally treated as string (explicit vector of character codes in GNU Calc conventions), extra (...) will introduce the observed 40 ... 41 into the vector. It might be tricky to remove the existing behaviour though - removing the parenthesis will likely break the existing use cases with genuine algebraic computations. We might, however, use "L" flag, described in "3.5.2 Formula syntax for Calc": ‘L’ Literal, for Lisp formulas only. See the next section. Now, it is only used for Lisp formulas, but we can make use of it in Calc formulas as well, preventing this (...) wrap. Or maybe others have better ideas. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-04-23 19:55 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <CAF_DUeG_W_40Ws_8Z+0Q=f_2yzT+cE9aoUxDbLnnb1n7-HDbaQ.ref@mail.gmail.com> 2023-04-22 14:20 ` [BUG] text cell contents have extra parentheses when used in formulas [9.6.4 ( @ /home/jet/.config/emacs/elpa/org-9.6.4/)] Jeff Trull 2023-04-23 10:50 ` Ihor Radchenko 2023-04-23 19:57 ` Ihor Radchenko
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).