通过强制立即扩展来定义样式文件中的颜色

通过强制立即扩展来定义样式文件中的颜色

我正在为学生编写海报模板(使用 beamer/beamerposter),我打算将其作为文件夹分发。它将包含一个学生可以开始编辑的 .tex 文件和一个样式文件(自定义 beamer 主题,我不希望他们弄乱它)。

该主题已设计为通过一种用户指定的颜色看起来很漂亮,所有其他结构和文本颜色都使用 \colorlet{usercolor!10!white} 等类型的混合从该颜色派生而来。

该事物的工作原理如上所述。

工作几乎已经完成,除了一个棘手的问题。我希望学生能够在 .tex 文件中定义用户指定的颜色,而不必编辑样式文件。

因此,我尝试了以下方法:

beamerthemeXXX.sty:

...
\newcommand{\postercolor}[3]{\def\@posterR{#1}\def\@posterG{#2}\def\@posterB{#3}}
\definecolor{posterthemecolor}{RGB}{\@posterR,\@posterG,\@posterB}
...

我在 .tex 文件中有以下指令:

\postercolor{128}{0}{0}

在我使用 \@posterX 宏的样式文件中,出现很多未定义的控制序列错误。

我猜这个问题与 TeX 有关,与颜色无关。如何强制上面的 \newcommand 定义中的 \def 立即展开?

我很抱歉没有提供 MWE,因为涉及多个文件,其中一些包含机密信息。无论如何,我有一种预感,这个问题很大程度上是由于我的编程大脑无法理解一些 TeX 特性。

答案1

你根本不需要使用\def\@poster*宏。只需在里面定义颜色\postercolor并确保它由你的样式初始化即可。

\documentclass{article}

%\usepackage{beamerthemeXXX}

% contents of beamerthemeXXX.sty
\usepackage{xcolor}
% ...
% define theme colour setting macro
\newcommand{\postercolor}[3]{\definecolor{posterthemecolor}{RGB}{#1,#2,#3}}

% initialise theme colour
\postercolor{128}{0}{0}
% ...
% end of beamerthemeXXX.sty

% user document preamble

% redefine theme colour if necessary
\postercolor{0}{128}{0}

\begin{document}

\textcolor{posterthemecolor}{poster colour}

\end{document}

相关内容