如何通过 newcommand 传递参数?

如何通过 newcommand 传递参数?

我想设置一个颜色参数,该参数将在文档开头定义,并在其他需要的地方进行更改。\setcolor如下所示的命令只是打印值“红色”,而不是保存它。因此\color{\setcolor}显然会失败。

我认为\renewcommand应该以某种方式参与其中,但我对如何做到这一点感到困惑。

\documentclass[11pt]{article}
\usepackage{color}
\newcommand{\setcolor}[1]{#1}

\begin{document}    
    \setcolor{red}
    \color{\setcolor}{some sample text}
\end{document}

答案1

这是一种方法。 \setcolor是改变存储变量的宏\mycolor

\documentclass[11pt]{article}
\usepackage{xcolor}
\newcommand\setcolor[1]{\def\mycolor{#1}}
\newcommand\mycolor{black}
\begin{document}  
Before text.
\setcolor{red}%
\textcolor{\mycolor}{some temporary sample text}
after text.

\color{\mycolor}
Now it is permanent.
\end{document}

在此处输入图片描述

答案2

目前尚不清楚您的用例是什么,正常用法是使用可以根据需要重新定义的颜色名称:

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage{color}

\definecolor{zz}{rgb}{1,0,0}

\begin{document}    

    \textcolor{zz}{some sample text}


{\definecolor{zz}{rgb}{0,0,1}

\textcolor{zz}{some sample text}

}

\textcolor{zz}{some sample text}

\end{document}

答案3

这里有一种方法,您可以提供一个用于改变颜色的可选参数和一个应用颜色的强制参数。

\documentclass[11pt]{article}
\usepackage{xcolor}
\newcommand{\mysetcolor}{magenta}% default
\newcommand{\setcolor}[2][]{%
    \ifx\relax#1\relax%
    \else%
        \renewcommand\mysetcolor{#1}%
    \fi%
    \textcolor{\mysetcolor}{#2}%
}

\begin{document}    
\noindent
\setcolor{some default colored sample text}\\
\setcolor[red]{some red sample text}\\
\setcolor{some sample text with the same color as the one used before}\\
\setcolor[green]{some green sample text}
\end{document}

在此处输入图片描述

相关内容