Hi all, There have been some threads recently about exporting to LaTeX, but I think something that I consider interesting for novice Org/LaTeX users has not been commented: the choice of the TeX engine. I think this is important because although people often say they "use LaTeX", what they actually use is TeX via the La-TeX format. What TeX engine to choose? I would dare to say the following: unless you want to maintain some backward compatibility with old documents, I highly recommend using LuaTeX or XeTeX, especially LuaTeX. Although pdfTeX is very popular among average or veterans LaTeX users, I think using it nowadays doesn't make much sense (IMHO). LuaTeX is the natural evolution of pdfTeX and adds the great advantage of accesing the TeX internals through Lua scripting. (What follows is specially intended for those Org users who haven't used XeTeX or LuaTeX yet). LuaTeX and XeTeX are *100% Unicode-based* and you can use your system fonts (open type, true type, etc.) in your documents in a simple way through the fontspec (https://www.ctan.org/pkg/fontspec) package, which provides a very neat interface and manages all OpenType features (LuaTeX and XeTeX use HarfBuzz as otf rendering engine). In LuaTeX also you can use any font that is not installed in your system: just indicate the path to the fonts files. This is very useful to test new fonts without installing them... In all modern word processing systems the user has always been able to pick a font easily, and that has been historically quite complex, hard and complicated in the (La)TeX ecosystem. For example, if we want to use globally the Palatino Linotype family in our LuaLaTeX document: \setmainfont{Palatino Linotype} We can add some OpenType features, like old style numbering: \setmainfont{Linux Libertine O}[Numbers=LowerCase] And if we want to use another font for italics, with certain properties (color[1] and scaling): \setmainfont{Crimson} [Numbers=Lowercase, ItalicFont=MinionPro-It.otf, ItalicFeatures={Color=red, Scale=MatchLowercase}] ([1] Requires the xcolor package) We can also define our own family with its properties (for example, with upper case numbers and letters tracking): \newfontfamily\myfamily{crimson} [Numbers=Lining,LetterSpace=3.0] Furthermore (for more advanced users), in LuaTeX we can define new opentype features on the fly, both positional and of substitution (as long as the typeface includes the glyphs needed to replace). For example, if I use the Crimson typeface, a contextual substitution for character Q + u can be defined, by including some Lua code through the LuaTeX primitive `directlua': \directlua{ fonts.handlers.otf.addfeature{ name = "mycontextual", type = "chainsubstitution", lookups = { { type = "substitution", data = { ["Q"] = "Q.alt01", }, }, }, data = { rules = { { after = { { "u" } }, current = { { "Q" } }, lookups = { 1 }, }, }, }, } } ... And add anywhere in the text: \addfontfeature{RawFeature=+mycontextual} If I had to choose, finally, between XeTeX and LuaTeX, I would choose LuaTeX, for things like these and many other reasons. In addition, there are emerging cool new packages that only work with LuaTeX. Anyway, XeTeX is another very good option too, especially for users who prefer something that works more "out of the box" and is less esotheric than LuaTeX. To export to PDF always with LuaTeX we can put in our ~ /.emacs: (setq org-latex-pdf-process '("lualatex -shell-escape -interaction nonstopmode -output-directory %o %f" "lualatex -shell-escape -interaction nonstopmode -output-directory %o %f" "lualatex -shell-escape -interaction nonstopmode -output-directory %o %f")) Or with latexmk, which will take care of compiling as many times as necessary for indexes, bibliographies, etc .: (setq org-latex-pdf-process '("latexmk -lualatex -e '$lualatex=q/lualatex %%O -shell-escape %%S/' %f")) Best regards, Juan Manuel
[-- Attachment #1: Type: text/plain, Size: 1004 bytes --] Juan Manuel Macías <maciaschain@posteo.net> writes: > would dare to say the following: unless you want to maintain some > backward compatibility with old documents, I highly recommend using > LuaTeX or XeTeX, especially LuaTeX. Although pdfTeX is very popular > among average or veterans LaTeX users, I think using it nowadays doesn't > make much sense (IMHO). Except if there is any feature you want to use that doesn’t work under LuaTeX. pdfpages for example says that it only supports pdflatex and vtex. Is there a way to replicate the functionality with LuaTeX? Possibly, but you have to find out how, and it’s not the first hit on stackoverflow. Currently LaTeX hasn’t converged on one implementation (which would imply that all features exist in the implementation it converged on and all packages were ported or have obvious replacements), so I don’t see a clearcut decision. Best wishes, Arne -- Unpolitisch sein heißt politisch sein ohne es zu merken [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 1125 bytes --]
Hi Arne, Dr. Arne Babenhauserheide writes: > Except if there is any feature you want to use that doesn’t work under > LuaTeX. > > pdfpages for example says that it only supports pdflatex and vtex. pdfpages works perfectly with both LuaTeX and XeTeX. I've been using it in LuaLaTeX for quite some time, by the way. Please read the first page on the package documentation: http://mirrors.ctan.org/macros/latex/contrib/pdfpages/pdfpages.pdf Currently There are very few things that will not work under luatex, for now (certain microtype properties, like letter tracking, and little else). In fact, the current trend is the opposite: many new packages that are emerging do not work under pdftex. The natural evolution of the TeX ecosystem is heading to LuaTeX, although it is normal for the TeX community to be cautious about backward compatibility and still mantain pdfTeX. But the present is already LuaTeX, clearly. The future, who knows... Best regards, Juan Manuel
Hello, i use LuaTex / LuaLatex successfully after some configs and readings. The result (quality and speed) for me is better then with the old latex engine. I'm satisfied. BUT one thing isn't working and as far as i read here, there is no solution yet :-( The latex-preview inside org-mode is not possible, because it seems, that org-mode needs the dvi subprocess for running the neccessary tools. With LuaLatex there is no dvi file, because it produces a pdf right away. Any solution will be wellcome. Regards Poul
Hi physiculus, physiculus writes: > Hello, > i use LuaTex / LuaLatex successfully after some configs and readings. > The result (quality and speed) for me is better then with the old latex engine. > I'm satisfied. > BUT one thing isn't working and as far as i read here, there is no > solution yet :-( > The latex-preview inside org-mode is not possible, because it seems, > that org-mode needs the dvi subprocess for running the neccessary tools. > With LuaLatex there is no dvi file, because it produces a pdf right > away. > Any solution will be wellcome. I have this in my ~/.emacs: #+begin_src emacs-lisp (setq luamagick '(luamagick :programs ("lualatex" "convert") :description "pdf > png" :message "you need to install lualatex and imagemagick." :use-xcolor t :image-input-type "pdf" :image-output-type "png" :image-size-adjust (1.7 . 1.5) :latex-compiler ("lualatex -interaction nonstopmode -output-directory %o %f") :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O"))) (add-to-list 'org-preview-latex-process-alist luamagick) (setq luasvg '(luasvg :programs ("lualatex" "dvisvgm") :description "dvi > svg" :message "you need to install lualatex and dvisvgm." :use-xcolor t :image-input-type "dvi" :image-output-type "svg" :image-size-adjust (1.7 . 1.5) :latex-compiler ("lualatex -interaction nonstopmode -output-format dvi -output-directory %o %f") :image-converter ("dvisvgm %f -n -b min -c %S -o %O"))) (add-to-list 'org-preview-latex-process-alist luasvg) (setq org-preview-latex-default-process 'luasvg) #+end_src You can set 'org-preview-latex-default-process' to luasvg or luamagick Best regards, Juan Manuel -- -- ------------------------------------------------------ https://juanmanuelmacias.com/
[-- Attachment #1: Type: text/plain, Size: 784 bytes --] On Tue, Apr 06, 2021 at 09:03:27PM +0200, physiculus wrote: > Hello, > i use LuaTex / LuaLatex successfully after some configs and readings. > The result (quality and speed) for me is better then with the old latex engine. > I'm satisfied. > BUT one thing isn't working and as far as i read here, there is no > solution yet :-( > The latex-preview inside org-mode is not possible, because it seems, > that org-mode needs the dvi subprocess for running the neccessary tools. > With LuaLatex there is no dvi file, because it produces a pdf right > away. > Any solution will be wellcome. AFAIK Lua(La)Tex can output dvi (and Juan Manuel's answer implies thati, too). Either via the option --output-format=dvi or invoking it as "dviluatex". But perhaps I missed something. Cheers - t [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --]
Hi Tomas, tomas@tuxteam.de writes: > AFAIK Lua(La)Tex can output dvi (and Juan Manuel's answer implies > thati, too). Either via the option --output-format=dvi or invoking > it as "dviluatex". > > But perhaps I missed something. Yes, the first option I have commented in my previous mail (setq luamagick etc ...) converts from pdf to png via 'convert' (imagemagick); in the second option (setq luasvg etc ...) compiles with the option `-output-format dvi' and then the converter is dvisvgm. Best regards, Juan Manuel https://juanmanuelmacias.com/
[-- Attachment #1: Type: text/plain, Size: 836 bytes --] Thanks, Juan Manuel, if LuaTeX just solved the "symbols problem" it would be a great feature. But.., why nothing in TeX seems to be easy?! ;D lualatex: security risk: running with elevated privileges This is LuaHBTeX, Version 1.12.0 (MiKTeX 20.11) system commands enabled. lualatex: file not writable for security reasons: .log ! I can't write on file `.log'. Please type another transcript file name ! Emergency stop ! ==> Fatal error occurred, no output PDF file produced! Probably a Windowz problem, don't care. Just moaning ;D But I take your advise and save it. Best regards > *From*: Juan Manuel Macías > *Subject*: Choosing a LaTeX Compiler (my predilection for LuaTeX) > *Date*: Mon, 05 Apr 2021 22:48:48 +0200 > *User-agent*: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) > [-- Attachment #2: Type: text/html, Size: 2455 bytes --]
[-- Attachment #1: Type: text/plain, Size: 5025 bytes --] Hi Juan Manuel, Thank you for writing this, which is the clearest explanation I have seen of the advantages of LuaLaTeX/XeLaTeX. I have been using LaTeX for nearly 30 years, but stopped using it intensively every day when pdfLaTeX was still the bleeding edge. When I started again in the last couple of years, it has been a bit confusing to understand why and what all these different versions are. These days I use LuaLaTeX as well, but most of the documents I process are exported from Org-mode. Best, --Diego On Mon, Apr 5, 2021 at 10:49 PM Juan Manuel Macías <maciaschain@posteo.net> wrote: > Hi all, > > There have been some threads recently about exporting to LaTeX, but I > think something that I consider interesting for novice Org/LaTeX users > has not been commented: the choice of the TeX engine. I think this is > important because although people often say they "use LaTeX", what they > actually use is TeX via the La-TeX format. What TeX engine to choose? I > would dare to say the following: unless you want to maintain some > backward compatibility with old documents, I highly recommend using > LuaTeX or XeTeX, especially LuaTeX. Although pdfTeX is very popular > among average or veterans LaTeX users, I think using it nowadays doesn't > make much sense (IMHO). LuaTeX is the natural evolution of pdfTeX and > adds the great advantage of accesing the TeX internals through Lua > scripting. > > (What follows is specially intended for those Org users who haven't used > XeTeX or LuaTeX yet). > > LuaTeX and XeTeX are *100% Unicode-based* and you can use your system > fonts (open type, true type, etc.) in your documents in a simple way > through the fontspec (https://www.ctan.org/pkg/fontspec) package, which > provides a very neat interface and manages all OpenType features (LuaTeX > and XeTeX use HarfBuzz as otf rendering engine). In LuaTeX also you can > use any font that is not installed in your system: just indicate the > path to the fonts files. This is very useful to test new fonts without > installing them... In all modern word processing systems the user has > always been able to pick a font easily, and that has been historically > quite complex, hard and complicated in the (La)TeX ecosystem. > > For example, if we want to use globally the Palatino Linotype family in > our LuaLaTeX document: > > \setmainfont{Palatino Linotype} > > We can add some OpenType features, like old style numbering: > > \setmainfont{Linux Libertine O}[Numbers=LowerCase] > > And if we want to use another font for italics, with certain properties > (color[1] and scaling): > > \setmainfont{Crimson} > [Numbers=Lowercase, > ItalicFont=MinionPro-It.otf, > ItalicFeatures={Color=red, > Scale=MatchLowercase}] > > ([1] Requires the xcolor package) > > We can also define our own family with its properties (for example, with > upper case numbers and letters tracking): > > \newfontfamily\myfamily{crimson} > [Numbers=Lining,LetterSpace=3.0] > > Furthermore (for more advanced users), in LuaTeX we can define new > opentype features on the fly, both positional and of substitution (as > long as the typeface includes the glyphs needed to replace). For > example, if I use the Crimson typeface, a contextual substitution for > character Q + u can be defined, by including some Lua code through the > LuaTeX primitive `directlua': > > \directlua{ > fonts.handlers.otf.addfeature{ > name = "mycontextual", > type = "chainsubstitution", > lookups = { > { > type = "substitution", > data = { > ["Q"] = "Q.alt01", > }, > }, > }, > data = { > rules = { > { > after = { { "u" } }, > current = { { "Q" } }, > lookups = { 1 }, > }, > }, > }, > } > } > > ... And add anywhere in the text: > > \addfontfeature{RawFeature=+mycontextual} > > If I had to choose, finally, between XeTeX and LuaTeX, I would choose > LuaTeX, for things like these and many other reasons. In addition, there > are emerging cool new packages that only work with LuaTeX. > > Anyway, XeTeX is another very good option too, especially for users who > prefer something that works more "out of the box" and is less esotheric > than LuaTeX. > > To export to PDF always with LuaTeX we can put in our ~ /.emacs: > > (setq org-latex-pdf-process > '("lualatex -shell-escape -interaction nonstopmode -output-directory > %o %f" > "lualatex -shell-escape -interaction nonstopmode -output-directory > %o %f" > "lualatex -shell-escape -interaction nonstopmode -output-directory > %o %f")) > > Or with latexmk, which will take care of compiling as many times as > necessary for indexes, bibliographies, etc .: > > (setq org-latex-pdf-process > '("latexmk -lualatex -e '$lualatex=q/lualatex %%O -shell-escape > %%S/' %f")) > > Best regards, > > Juan Manuel > > [-- Attachment #2: Type: text/html, Size: 5923 bytes --]
Hi Diego Diego Zamboni writes: > Hi Juan Manuel, > > Thank you for writing this, which is the clearest explanation I have > seen of the advantages of LuaLaTeX/XeLaTeX. I have been using LaTeX > for nearly 30 years, but stopped using it intensively every day when > pdfLaTeX was still the bleeding edge. When I started again in the last > couple of years, it has been a bit confusing to understand why and > what all these different versions are. These days I use LuaLaTeX as > well, but most of the documents I process are exported from Org-mode. Certainly, LuaTeX has many possibilities, although perhaps we would have liked more if there was a "LispTeX" :-D (by the way, the most lispy thing I've seen on planet TeX is this strange and interesting package [a Lisp interpreter written in TeX! language]: https://www.ctan.org/pkg/lisp-on-tex) This is a very simple example of what can be done in LuaTeX through its Lua interpreter (from Org): we define a command, with a simple Lua function, that put all capital letters of the document in TeX Gyre Pagella font, in red and scaled; and all digits in bold. (Anyway, this can also be done in Org Mode with a custom filter...): #+NAME:luacode #+begin_src lua :exports none function change_test ( text ) text = string.gsub ( text, "%d", "\\textbf{%0}" ) text = string.gsub ( text, "%u", "{\\myfamily %0}" ) return text end #+end_src #+NAME:latexcode #+begin_src latex :exports none :noweb yes \usepackage{fontspec} \usepackage{luacode} \usepackage{xcolor} \setmainfont{Linux Libertine O} \newfontfamily\myfamily{TeX Gyre Pagella}[Scale=2,Color=red] \begin{luacode} <<luacode>> \end{luacode} \newcommand\change{\directlua{luatexbase.add_to_callback ( "process_input_buffer" , change_test , "change_test" )}} \newcommand\nochange{\directlua{luatexbase.remove_from_callback ( "process_input_buffer" , "change_test" )}} #+end_src #+begin_src latex :noweb yes :results raw ,#+LaTeX_HEADER: <<latexcode>> #+end_src #+LaTeX:\change Lorem ImpsuM DoloR Sit aMet 1234567890 #+LaTeX:\nochange Lorem ImpsuM DoloR Sit aMet 1234567890 x----- For more esoteric features I recommend trying the chickenize package (very didactic): https://www.ctan.org/pkg/chickenize Best regards, Juan Manuel
Am Di, 2021-04-06, 21:13 +0200, Juan Manuel Macías <maciaschain@posteo.net> schrieb:
Hello again,
thanks for the snippet, but unfortunately it doesn't work :-(
Now it doesn't stop with error, it happens nothing.
here is my config.
Variable:
org-preview-latex-default-process is a variable defined in ‘org.el’.
Its value is ‘luasvg’
Original value was ‘dvipng’
Variable:
org-preview-latex-process-alist
Value:
((luasvg :programs
("lualatex" "dvisvgm")
:description "dvi > svg" :message "you need to install lualatex and dvisvgm." :use-xcolor t :image-input-type "dvi" :image-output-type "svg" :image-size-adjust
(1.7 . 1.5)
:latex-compiler
("lualatex -interaction nonstopmode -output-format dvi -output-directory %o %f")
:image-converter
("dvisvgm %f -n -b min -c %S -o %O"))
(dvipng :programs
("latex" "dvipng")
:description "dvi > png" :message "you need to install the programs: latex and dvipng." :image-input-type "dvi" :image-output-type "png" :image-size-adjust
(1.0 . 1.0)
:latex-compiler
("latex -interaction nonstopmode -output-directory %o %f")
:image-converter
("dvipng -D %D -T tight -o %O %f"))
(dvisvgm :programs
("latex" "dvisvgm")
:description "dvi > svg" :message "you need to install the programs: latex and dvisvgm." :image-input-type "dvi" :image-output-type "svg" :image-size-adjust
(1.7 . 1.5)
:latex-compiler
("latex -interaction nonstopmode -output-directory %o %f")
:image-converter
("dvisvgm %f -n -b min -c %S -o %O"))
(imagemagick :programs
("latex" "convert")
:description "pdf > png" :message "you need to install the programs: latex and imagemagick." :image-input-type "pdf" :image-output-type "png" :image-size-adjust
(1.0 . 1.0)
:latex-compiler
("pdflatex -interaction nonstopmode -output-directory %o %f")
:image-converter
("convert -density %D -trim -antialias %f -quality 100
%O")))
here is the testfile:
\begin{displaymath}
\sqrt{a^2-b^2}=c
\end{displaymath}
\begin{equation} % arbitrary environments,
x=\sqrt{b} % even tables, figures
\end{equation} % etc
If $a^2=b$ and \( b=2 \), then the solution must be
either $$ a=+\sqrt{2} $$ or \[ a=-\sqrt{2} \].
I use your luasvg snippet.
Do i have to do anything else?
Any command afterwards?
Hope someone could help :-)
Regards
Poul
> Hi physiculus,
>
> physiculus writes:
>
>> Hello,
>> i use LuaTex / LuaLatex successfully after some configs and readings.
>> The result (quality and speed) for me is better then with the old latex engine.
>> I'm satisfied.
>> BUT one thing isn't working and as far as i read here, there is no
>> solution yet :-(
>> The latex-preview inside org-mode is not possible, because it seems,
>> that org-mode needs the dvi subprocess for running the neccessary tools.
>> With LuaLatex there is no dvi file, because it produces a pdf right
>> away.
>> Any solution will be wellcome.
>
> I have this in my ~/.emacs:
>
> #+begin_src emacs-lisp
> (setq luamagick
> '(luamagick
> :programs ("lualatex" "convert")
> :description "pdf > png"
> :message "you need to install lualatex and imagemagick."
> :use-xcolor t
> :image-input-type "pdf"
> :image-output-type "png"
> :image-size-adjust (1.7 . 1.5)
> :latex-compiler ("lualatex -interaction nonstopmode -output-directory %o %f")
> :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")))
> (add-to-list 'org-preview-latex-process-alist luamagick)
>
> (setq luasvg
> '(luasvg
> :programs ("lualatex" "dvisvgm")
> :description "dvi > svg"
> :message "you need to install lualatex and dvisvgm."
> :use-xcolor t
> :image-input-type "dvi"
> :image-output-type "svg"
> :image-size-adjust (1.7 . 1.5)
> :latex-compiler ("lualatex -interaction nonstopmode -output-format dvi -output-directory %o %f")
> :image-converter ("dvisvgm %f -n -b min -c %S -o %O")))
> (add-to-list 'org-preview-latex-process-alist luasvg)
> (setq org-preview-latex-default-process 'luasvg)
> #+end_src
>
> You can set 'org-preview-latex-default-process' to luasvg or luamagick
>
> Best regards,
>
> Juan Manuel
>
> --
> --
> ------------------------------------------------------
> https://juanmanuelmacias.com/
>
--
Jens Reimer
Hello,
physiculus writes:
> Hello again,
>
> thanks for the snippet, but unfortunately it doesn't work :-(
>
> Now it doesn't stop with error, it happens nothing.
> here is my config.
>
> Variable:
> org-preview-latex-default-process is a variable defined in ‘org.el’.
> Its value is ‘luasvg’
> Original value was ‘dvipng’
It's weird, it should work :-( ... I assume you have dvisvgm installed
in your TeX Live installation, is that right? (You can excute something
like 'dvisvgm --help' in your terminal)
What is your SO?
Anyway, you can try the imagemagick option:
(setq luamagick
'(luamagick
:programs ("lualatex" "convert")
:description "pdf > png"
:message "you need to install lualatex and imagemagick."
:use-xcolor t
:image-input-type "pdf"
:image-output-type "png"
:image-size-adjust (1.0 . 1.0)
:latex-compiler ("lualatex -interaction nonstopmode -output-directory %o %f")
:image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")))
(add-to-list 'org-preview-latex-process-alist luamagick)
(setq org-preview-latex-default-process 'luamagick)
Best regards,
Juan Manuel
Am Mi, 2021-04-07, 19:26 +0200, Juan Manuel Macías <maciaschain@posteo.net> schrieb:
Yes that works!
usually i do not use imagemagick. I use graphicsmagick, but ido not know
how i have to set the right command line.
SVG does nothing.
Very sad :-(
I want to use this because of quality reasons.
Do you know, how i can test svg?
Regards
Poul
>
> It's weird, it should work :-( ... I assume you have dvisvgm installed
> in your TeX Live installation, is that right? (You can excute something
> like 'dvisvgm --help' in your terminal)
>
> What is your SO?
>
> Anyway, you can try the imagemagick option:
>
> (setq luamagick
> '(luamagick
> :programs ("lualatex" "convert")
> :description "pdf > png"
> :message "you need to install lualatex and imagemagick."
> :use-xcolor t
> :image-input-type "pdf"
> :image-output-type "png"
> :image-size-adjust (1.0 . 1.0)
> :latex-compiler ("lualatex -interaction nonstopmode -output-directory %o %f")
> :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")))
> (add-to-list 'org-preview-latex-process-alist luamagick)
>
> (setq org-preview-latex-default-process 'luamagick)
Hello again,
physiculus writes:
> Yes that works!
> usually i do not use imagemagick. I use graphicsmagick, but ido not know
> how i have to set the right command line.
> SVG does nothing.
> Very sad :-(
> I want to use this because of quality reasons.
> Do you know, how i can test svg?
the dvisvgm option with luatex is definitely wrong, since dvisvgm does
not support opentype fonts. Sorry for having you confused with my other
snippet. The good news, it seems, is that dvisvgm will support opentype
fonts as of version 2.10, which I assume the next version of texlive
will include it. The actual version is 2.9.1 (command dvisvgm
--version).
Best regards,
Juan Manuel