我正在为学生编写海报模板(使用 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}