Définir une commande sur la ligne de commande xelatex
Je voudrais définir la commande \qonlysur la xelatexligne de commande comme étant la chaîne chapter07. Plus tard dans mon fichier LaTeX j'aurai un ifdefqui fournira l'argument à un \includeonlyif \qonlyest défini.
Cela fonctionne si j'utilise latexmk:
$ latexmk -usepretex='\def\qonly{chapter07}' -pdfxe book.tex -bibtex
Mais cela ne fonctionne pas avec xelatex:
$ xelatex '\relax\def\qonly{chapter07}' book.tex
Cela me donne cette erreur:
xelatex '\def\qonly{chapter07}' book.tex
This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
LaTeX2e <2020-02-02> patch level 5
L3 programming layer <2020-03-06>
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
<*> \def\qonly{chapter07} b
ook.tex
? ^D
! Emergency stop.
...
<*> \def\qonly{chapter07} b
ook.tex
No pages of output.
Transcript written on texput.log.
$
Y a-t-il un moyen de faire cela?
EDIT: L'une des affiches était confuse pourquoi j'ai les contre-citations ci-dessus. La raison en est que j'utilise MacOS et mon shell est zsh, qui interprète les guillemets comme un guillemet, il est donc nécessaire de le citer. Voici ce qui se passe si je ne fournis pas le backquote:
% xelatex \def\qonly{chapter07} book.tex
This is XeTeX, Version 3.14159265-2.6-0.999992 (TeX Live 2020) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
! I can't find file `defqonly{chapter07}'.
<*> defqonly{chapter07}
book.tex
(Press Enter to retry, or Control-D to exit)
Please type another input file name:
Réponses
Vous n'avez pas besoin de transmettre les commandes entre guillemets au compilateur. Pensez à tout ce qui suit un appel au compilateur comme du code qui devrait être dans un fichier TeX normal (sauf si vous passez le fichier tex lui-même, comme dans xelatex book.tex). Alors, abandonnez l'utilisation des citations et de \inputvotre source:
xelatex \def\qonly{chapter07} \input{book}
Puisqu'il se book.textrouve à la fin du flux d'entrée, TeX veut simplement le définir comme chaîne de caractères book.tex, ne pas lire dans le fichier book.tex, d'où l'utilisation de \input{book}.