Hi all, I'm experimenting with `org-link-set-parameters' to create multilingual quotes (chunks of text) inside paragraphs. Although I focus mainly on the export to LaTeX with babel and csquotes packages, I also want extend support for HTML and odt output. I leave here some sketches. For the `:face' parameter I use for laziness a face already defined in Magit :-). `:display' with the value 'full can be removed. First, we have the LaTeX babel command \foreignlanguage{lang}{chunk of text}. The language can be expressed by abbreviation ("de" for German; here I reuse `org-latex-babel-language-alist') or explicitly preceded by a "!": "!german" (the reason for the latter is that in babel we can define new languages): [[lang:de][some text in German]] or [[lang:!german][some text in German]] The code: (org-link-set-parameters "lang" :display 'full :face 'magit-header-line-key :export (lambda (target desc format) (cond ((eq format 'latex) (let ((langs org-latex-babel-language-alist)) (concat "\\foreignlanguage{" (if (string-match-p "!" target) (replace-regexp-in-string "!" "" target) (cdr (assoc target langs))) "}{" desc "}"))) ;; TODO ((or (eq format 'html) (eq format 'odt)) (format "%s" desc))))) We also have this command from the csquotes package for foreign quoted texts (loads only the hyphenation rules for the language and sets the text between quotation marks): \hyphentextquote{lang}{quoted text}. For this I have defined a new link "qlang": (org-link-set-parameters "qlang" :display 'full :face 'magit-header-line-key :export (lambda (target desc format) (cond ((eq format 'latex) (let ((langs org-latex-babel-language-alist)) (concat "\\hyphentextquote{" (if (string-match-p "!" target) (replace-regexp-in-string "!" "" target) (cdr (assoc target langs))) "}{" desc "}"))) ((or (eq format 'html) (eq format 'odt)) ;; TODO (use here the proper quotes) (format "«%s»" desc))))) We can even make the citations come out in color when we are in draft mode, thanks to the LaTeX ifdraft package: (org-link-set-parameters "qlang" :display 'full :face 'magit-header-line-key :export (lambda (target desc format) (cond ((eq format 'latex) (let ((langs org-latex-babel-language-alist)) (concat "{\\ifdraft{\\color{teal}}{}\\hyphentextquote{" (if (string-match-p "!" target) (replace-regexp-in-string "!" "" target) (cdr (assoc target langs))) "}{" desc "}}"))) ((or (eq format 'html) (eq format 'odt)) ;; TODO (format "«%s»" desc))))) Best regards, Juan Manuel
On 26/07/2021 16:25, Juan Manuel Macías wrote: > > I'm experimenting with `org-link-set-parameters' to create multilingual > quotes (chunks of text) inside paragraphs. Although I focus mainly on > the export to LaTeX with babel and csquotes packages, I also want extend > support for HTML and odt output. I leave here some sketches. Are you intentionally avoiding macros {{{lang(ru, текст)}}}? It seems, you are abusing links a bit. Though it allows to hide "target" part and thus to reduce "noise" in the text. On the other hand, links may be broadly considered as customizable element ("interactive" property is not necessary for such snippets) since there are no other similar objects in Org syntax. One problem is support in 3rd party tools: pandoc, various renderers, e.g. (ruby?) on github. Another issue is that someone will almost immediately want to put such quote inside link or vice versa to make some fragment of a quote a regular link. A workaround is possible: lang:de?href=https%3A%2F%2Forgmode.org%2F with some code for handling of unescaped target. I expect complains that it is not user-friendly to require splitting fragment at the borders of inner link. Org does not support nested objects of the same type. > or explicitly preceded by > a "!": "!german" (the reason for the latter is that in babel we can > define new languages): Unsure that ODT and HTML allows to define languages. I would consider some lisp structures describing mapping of customizable languages codes to some set of properties.
Hi Maxim, thank you for your comments. Maxim Nikulin writes: > Are you intentionally avoiding macros {{{lang(ru, текст)}}}? Yes. Precisely, these experiments are just an attempt to find an alternative to macros (I use macros a lot). In scenarios like these (chunks of text) is where the issue of the comma as a escape character in macros becomes more evident (this comma issue has been discussed in a past thread, and some interesting proposals were made). Links and macros, of course, have their pros and cons. > It seems, you are abusing links a bit. I'm afraid it's true :-). Anyway I think the links have a great potential. I have tried exploring other "eccentric" uses of links, for example here (to export subfigures to LaTeX and HTML): https://orgmode.org/list/87mty1an66.fsf@posteo.net/ or also in my org-critical-edition package, to work on (philological) critical editions from Org: https://gitlab.com/maciaschain/org-critical-edition > [...] > Another issue is that someone will almost immediately want to put such > quote inside link or vice versa to make some fragment of a quote a > regular link. Yes, that issue you describe would be one of the biggest drawbacks for the use of links in these contexts. Links (or macros) are a good user-level solution to solve certain specific cases, IMHO. At a native level (in case Org someday implement consistent and native multilingual support), I don't know what would be the best solution for multilingual chunks of text inside paragraphs. Maybe some kind of inline `quote' block? Best regards, Juan Manuel
On 28/07/2021 20:49, Juan Manuel Macías wrote: > Links (or macros) are a good user-level solution to solve certain > specific cases, IMHO. At a native level (in case Org someday implement > consistent and native multilingual support), I don't know what would be > the best solution for multilingual chunks of text inside paragraphs. > Maybe some kind of inline `quote' block? My personal impression is that lightweight Org markup is suitable for simple documents. Problems grow as a snowball as soon as a document becomes more complex. If syntax were extended too much, Org would loose its simplicity that is one of its advantage. Complex documents require more strict and flexible thus more verbose markup format. It seems, your have tried all possible variants for inline quotes https://orgmode.org/worg/dev/org-syntax.html#Objects macros, src_org{}, even links and nothing is perfect https://orgmode.org/list/875yzwce28.fsf@posteo.net Code for any approach may be polished to some extent, but some limitations will remain.