我尝试使用开关\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
环境而且无论如何文本也不应该被支撑。