我希望 LaTeX 源文件能够根据作业名称以不同的方式进行编译。但是,当我运行pdflatex mwe
包含mwe.tex
\documentclass{article}
\begin{document}
\ifx{mwe}\jobname
true
\else
false.\jobname.
\fi
\def\mwe{mwe}
\ifx\mwe\jobname
true
\else
false.\jobname.\mwe.
\fi
\end{document}
生成的 pdf 文件为“false.mwe. false.mwe.mwe。”,而我预期看到的是“true”。我做错了什么?
答案1
\ifx
只比较两个标记。在第一个测试中,它比较{
和m
,在第二个测试中,它比较宏 \mwe
和原始 \jobname
,它们并不完全相同(即使它们扩展为相同的文本)。
如果要进行字符串比较,可以使用expl3
(\str_if_eq:nnTF
使用\str_if_eq:eeTF
以便在比较之前扩展宏):
\documentclass{article}
\ExplSyntaxOn
\cs_new_eq:NN \strcompare \str_if_eq:eeTF
\ExplSyntaxOff
\begin{document}
\strcompare{mwe}{\jobname}
{true}
{false.\jobname.}
\def\mwe{mwe}
\strcompare{\mwe}{\jobname}
{true}
{false.\jobname.\mwe.}
\end{document}
文档打印true true
。