\newcommand\whatever 忽略进一步的 \newcommand\whatever

\newcommand\whatever 忽略进一步的 \newcommand\whatever

是否可以定义一个命令\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}

在此处输入图片描述

相关内容