YtoTech / latex-on-http

Compiles Latex documents through an HTTP API
https://latex.ytotech.com
GNU Affero General Public License v3.0
35 stars 7 forks source link

Support latexmk and custom compilation chains #23

Open MonsieurV opened 2 years ago

MonsieurV commented 2 years ago

Allows to specify custom compilation chains, while ensuring containment.

Include a support for latexmk, and make it the default.

MonsieurV commented 2 years ago

(From a correspondence with David Carlisle)

Bibtex / Biblatex

Thanks for bringing this point to my consciousness. I use Latex for documents without references, so I didn't address this point so far.

I've just added an additional option to select the bibliography to run with the Latex compiler: they are two commands available so far (bibtex and biber), with bibtex the default.

There are still limitations for the moment (for eg. platex and uplatex doesn't use the main Latex wrapper used in Latex-on-HTTP, so bibliography certainly won't work properly with them and the option has no effect). If you encounter them, I'll be glad to support more cases with examples provided.

See the README https://github.com/YtoTech/latex-on-http#compiling-latex And a sample with the multipart API https://github.com/YtoTech/latex-on-http/tree/master/examples/bibtex

In practice you can add { "options.bibliography.command": "biber" ... } to your json payload

platex / uplatex

The wrapper used for the moment (runlatex) doesn't support platex and uplatex, so for the moment there will be limitations when multiple runs are necessary or for specifying bibtex executable.

My platex examples are basically taken from overleaf, their example has a pbibtex citation:

https://www.overleaf.com/learn/latex/Questions/Does_Overleaf_support_pTeX%3F

I removed the Japanese \cite part of that example from the version on the learnlatex tutorial since I wanted to get the simpler example working first:-)

MonsieurV commented 2 years ago

(from a correspondence with Denis Bitouzé)

Abstract:

avec le client CLI lol qui a été créé par la communauté : https://github.com/YtoTech/latex-on-http#using-cli

Miam miam ! (Quel nom ! 😉

Par ex: lol -s ytotech -c lualatex -b bibtex

La classe letgut s'appuie sur biber et non sur bibtex. J'ai vu que lol permet de spécifier le moteur de bibliographie désiré (mais cf. ci-dessous).

lettre45.tex .tex .bib .cls .sty *.png

Bon, après vu la classe lesgut, ça ne serra peut-être pas évident à faire tourner. (pas de shell-escape pour le moment côté LaTex-on-HTTP)

Bonne nouvelle : la classe letgut ne le nécessite pas 😄

J'ai fais quelques essais, et même en copiant letgut-banner.sty et CTAN.png d'une autre lettre il y a des erreurs dont je ne suis pas sûr de déchiffrer la vraie cause.

J'ai pushé des modifications (dont une pour momentanément contourner un bug, a priori pas lié à letgut, que j'examinerai demain si j'ai le temps) qui font que, désormais, le fichier compile avec une TL 2021 à jour en recourant à latexmk...

C'est sensé se compiler complètement avec latexmk -pdflua, c'est cela ?

... oui mais, au moyen d'un fichier de configuration .latexmkrc qui était déjà utilisé pour la Lettre 44 et que je viens de pusher. Je ne sais pas si lol permet d'utiliser ce genre de fichier, notamment du fait qu'il est caché mais, au pire, on peut le renommer en latexmkrc, latexmk acceptant les deux. Du coup, il devient inutile de spécifier les moteurs lualatex et biber.

Avec :

┌──── │ lol -v -s ytotech -c lualatex -b biber lettre45.tex .tex .bib .cls .sty *.png └────

j'obtiens les erreurs suivantes :

┌──── │ ERROR: YtoTech compilation error (status code 400): │ b'/app/latex-on-http/tmp/loh_workspaces/a3e68fcc-98f5-41ef-98cf-1631fa26abd9/main_document.tex: warning: [hyperref] Draft mode on\n' │ b"nouveautes.tex:9: error: [acro] You've requested acronym ctan' on line 9 but you\n" │ b' at \\ac{ctan}\n' │ b'nouveautes.tex:9: error: Missing number, treated as zero\n' │ b' at <to be read again>\n' │ b' from \\ac{ctan}\n' │ b"nouveautes.tex:9: error: You can't use\relax' after \advance\n" │ b' at \gacro_ctan_int\n' │ b' from \ac{ctan}\n' │ b'nouveautes.tex:9: error: TeX capacity exceeded, sorry [input stack size=5000]\n' │ b' at \g__acro_ctan_pages_seq ->\gacro_ctan_pages_seq \__seq_item:n {1@1@2}\n' │ b' ^\n' │ b' from \ac{ctan}\n' │ b'nouveautes.tex: Fatal error (no output file produced)\n' │ b'There were errors; /app/latex-on-http/tmp/loh_workspaces/a3e68fcc-98f5-41ef-98cf-1631fa26abd9/output.pdf not updated\n' └────

manifestement liées au package acro. Comme les messages sont incomplets, je ne comprends pas bien leurs causes. La distribution TeX utilisée par LaTeX-on-HTTP est-elle à jour ? Par exemple, la File List de :

--8<---------------cut here---------------start------------->8--- \listfiles

\documentclass{article} \usepackage{acro} \begin{document} Foo. \end{document} --8<---------------cut here---------------end--------------->8---

est chez moi :

┌──── │ File List │ article.cls 2021/02/12 v1.4n Standard LaTeX document class │ size10.clo 2021/02/12 v1.4n Standard LaTeX file (size option) │ acro.sty 2021/01/16 v3.5 typeset acronyms and other abbreviations (CN) │ l3keys2e.sty 2021-08-27 LaTeX2e option processing using LaTeX3 keys │ expl3.sty 2021-08-27 L3 programming layer (loader) │ l3backend-luatex.def 2021-08-04 L3 backend support: PDF output (LuaTeX) │ translations.sty 2021/01/17 v1.10a internationalization of LaTeX2e packages │ (CN) │ etoolbox.sty 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) │ pdftexcmds.sty 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO) │ infwarerr.sty 2019/12/03 v1.5 Providing info/warning/error messages (HO) │ iftex.sty 2020/03/06 v1.0d TeX engine tests │ ltxcmds.sty 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) │ test.acr │ ts1cmr.fd 2019/12/16 v2.5j Standard LaTeX font definitions │ translations-basic-dictionary-english.trsl (english translation file `transl │ ations-basic-dictionary') │ test.acr │ *** └────

Serait-il possible que LaTeX-on-HTTP (ou lol) permette un accès au fichier .log, notamment en cas d'échec de la compilation ?

-> Je peux regarder pour supporter latexmk,

Ce serait /très/ utile : ce makefile (codé en Perl) permet d'assurer que le PDF obtenu est stable : toutes les compilations (pdf|xe|lua)latex, biber, makeglossaries, xindy, etc. auront été faites le nombre nécessaire et suffisant de fois.

je l'avais noté il y a un moment (par contre shell-espace ça risque d'être plus compliqué)

Encore une fois, pas de shell-escape nécessaire.

MonsieurV commented 2 years ago

(From a correspondence with Pedro Manso Bernal)

Abstract:

[...] now i need to compile latex to png (or any other image format) instead of pdf, i see on internet that is posible using the following command:

pdflatex file
convert -density 300 file.pdf -quality 90 file.png