是否可以定义一个命令\foo
,以便忽略进一步的命令\newcommand\foo
(我不是这个意思\renewcommand
)并且不返回错误?
例如:
\newcommand\foo[1]{\textcolor{red}{#1}}
\newcommand\foo[1]{\textcolor{blue}{#1}} % to be ignored!
\foo{This should print in red.}
我之所以提出这个要求,是因为我有一份doc.tex
表格
\newcommand\foo[1]{\textcolor{blue}{#1}}
\foo{Some text}
我想将其包含在另一个文档中\input{doc.tex}
,并且我想一些文本以红色打印(当然,实际上我的问题不是关于文本颜色......)。
答案1
将两个\newcommand
宏的用法都改为\providecommand
。\providecommand
只有当没有同名的宏时,才会定义一个新宏,否则它将默默地忽略第二个定义(或者更确切地说是再次定义的尝试)并且什么也不做。
当然,\providecommand\foo
先来后到仍然很重要。根据实际使用情况,尽早加载应该是安全的——除非ToC
出现一些非常“奇怪”的用法,例如干扰交叉引用/计数器系统或相关问题。
\documentclass{article}
\usepackage{xcolor}
\providecommand\foo[1]{\textcolor{red}{#1}}
\providecommand\foo[1]{\textcolor{blue}{#1}} % Will be ignored!
\begin{document}
\foo{This text should be printed in red -- and it is red}
\end{document}