在 xelatex 命令行上定义一个命令

在 xelatex 命令行上定义一个命令

我想将命令行\qonly上的命令定义xelatex为字符串chapter07。稍后在我的 LaTeX 文件中,我将有一个为if定义的ifdef参数提供参数。\includeonly\qonly

如果我使用以下方法,则此方法有效latexmk

$ latexmk -usepretex='\def\qonly{chapter07}' -pdfxe book.tex -bibtex

但这不适用于 xelatex:

$ xelatex '\relax\def\qonly{chapter07}' book.tex

它给了我这个错误:

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.
$ 

有什么办法可以做到这一点吗?

编辑:其中一位发帖者对我上面为什么有反引号感到困惑。原因是我使用的是 MacOS,而我的 shell 是zsh,它将反引号解释为引号,因此有必要将其引号。如果我不提供反引号,将发生以下情况:

% 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:

答案1

您不需要将带引号的命令传递给编译器。将调用编译器后的任何内容视为应位于常规 TeX 文件中的代码(除非您传递 tex 文件本身,如xelatex book.tex)。因此,请放弃使用引号和\input您的源代码:

xelatex \def\qonly{chapter07} \input{book}

由于book.tex位于输入流的末尾,TeX 只想将其设置为字符串book.tex,而不是读入文件book.tex,因此使用\input{book}

相关内容