TeX \ifx 条件不适用于字符串比较

TeX \ifx 条件不适用于字符串比较

我希望 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

相关内容