我想将命令行\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}
。