\IfFileExists 后面的“\reserved@a 定义中的参数编号非法”

\IfFileExists 后面的“\reserved@a 定义中的参数编号非法”

我尝试使用开关\IfFileExists以不同的方式定义命令,但收到非法参数错误。我正在从 TeX Live 2021 运行 LaTeX。一个最简单的示例是:

\documentclass[12pt,fleqn]{article}
\usepackage[dvipsnames]{xcolor}
\IfFileExists{filename}
{\newcommand{\ABC}[1]{{\begin{color}{Red}{#1}\end{color}}}}
{\newcommand{\ABC}[1]{{\begin{color}{Blue}{#1}\end{color}}}}

\begin{document}
\ABC{Why?}
\end{document}

答案1

\IfFileExists不像“通常”的条件语句那样工作:它将真和假分支存储在宏中,并在以后使用它们。这要求您将#其中的每一个都翻倍:

\documentclass[12pt,fleqn]{article}
\usepackage[dvipsnames]{xcolor}
\IfFileExists{filename} %                 VV
{\newcommand{\ABC}[1]{{\begin{color}{Red}{##1}\end{color}}}}
{\newcommand{\ABC}[1]{{\begin{color}{Blue}{##1}\end{color}}}}

\begin{document}
\ABC{Why?}
\end{document}

答案2

最好采用不同的方法。

\documentclass{article}
\usepackage[dvipsnames]{xcolor}

\newcommand{\ABCdo}[2]{\leavevmode{\color{#1}#2}}

\IfFileExists{filename}
  {\newcommand{\ABC}{\ABCdo{Red}}}
  {\newcommand{\ABC}{\ABCdo{Blue}}}

\begin{document}
\ABC{Why?}
\end{document}

输出filename(不存在):

在此处输入图片描述

输出latex.ltx(存在):

在此处输入图片描述

没有color环境而且无论如何文本也不应该被支撑。

相关内容