![\IfFileExists 后面的“\reserved@a 定义中的参数编号非法”](https://linux22.com/image/448430/%5CIfFileExists%20%E5%90%8E%E9%9D%A2%E7%9A%84%E2%80%9C%5Creserved%40a%20%E5%AE%9A%E4%B9%89%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0%E7%BC%96%E5%8F%B7%E9%9D%9E%E6%B3%95%E2%80%9D.png)
我尝试使用开关\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
环境而且无论如何文本也不应该被支撑。