xelatex 条件编译

xelatex 条件编译

我想在编译时使用不同的选项来编译同一个 tex 文件。最小示例:bare.tex

\documentclass{article}
    \begin{document}
    \ifx\myclass\undefined
        Myclass was undefined
    \else
        Myclass is \myclass
    \fi
\end{document}

我编译

xelatex bare "\def\myclass{56}"

结果是

在此处输入图片描述

我当然想要“Myclass is 56”,这有什么错吗?

答案1

如果你xelatex -help从命令行调用,你会得到

> xelatex --help
Usage: xetex [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   or: xetex [OPTION]... \FIRST-LINE
   or: xetex [OPTION]... &FMT ARGS
  Run XeTeX on TEXNAME, usually creating TEXNAME.pdf.
  Any remaining COMMANDS are processed as XeTeX input, after TEXNAME is read.
  If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,
  use it.  Else use `NAME.fmt', where NAME is the program invocation name,
  most commonly `xetex'.

文字是什么没有说的是COMMANDS插入主文件TEXNAME已被读入。例如,以下文档test.tex

a

调用如下函数

xetex test "b\bye"

将产生

在此处输入图片描述

但变成test.tex

a\bye

只会打印“a”,因为b\bye将读入因此\bye忽略。

您的呼叫也会发生同样的情况:输入\def\myclass{56}插入之后\end{document},因此它根本不执行任何操作。

您想使用其他功能:

xelatex '\def\myclass{56}\input{bare}'

(我更喜欢单引号,但这只是个人观点)。由于bare.tex是输入的第一个文件,因此作业名称将被正确设置。

相关内容