我是 TeX 新手,我“继承”了一个 tex 文档和类文件。该类文件具有:
\newtoks\copyrtyr
\newtoks\acmcopyr
\newtoks\boilerplate
\def\CopyrightYear#1{\global\copyrtyr{#1}}
\def\crdata#1{\global\acmcopyr{#1}}
\def\permission#1{\global\boilerplate{#1}}
但它从不使用copyrtyr
、acmcopyr
、、或中的任何一个。我如何在类文件中使用这些boilerplate
,但在 tex 文件中指定值?所有帮助都将不胜感激。CopyrightYear
crdata
permission
\toappear{}
答案1
\newtoks
定义一个令牌寄存器,即存储令牌的地方。
\newtoks{\copyrtyr}
--> 令牌寄存器 \copyrtyr 已定义。
\copyrtyr{2015}
将设置寄存器为值 2015。如果稍后要使用(“打印”),\the\copyrtyr
则使用 -->\the
是TeX
命令序列(几乎)总是强制打印寄存器的某些值或状态。
这\def\CopyrightYear#1
是一个宏定义 -> 它将使用一对中包含的值{...}
并将其存储到这里令牌寄存器中\copyrtyr
(这是给定代码中的定义) --> 所有其他的\def
都\newtoks
非常相似。
在类中,你可以将命令定义\toappear
为任何内容,例如,像下面这样打印出寄存器值:
\newcommand{\toappear}{\the\copyrtyr\ \the\acmcopyr\ \the\boilerplate}
这个定义不是一个调用(并且\toappear
此刻的有用性是*doubtfull ;-)) --> it just says what
\toappear`应该做如果稍后调用它的话。
的调用\CopyrightYear{2015}
可以在之后发生\begin{document}
,即不需要在前言中,也不需要在类中,除非从一开始就应该给出一些值。
另请参阅,重复使用等将会改变以后\CopyrightYear
的输出,但不会改变之前的输出。\toappear
\documentclass{article}
%% Suppose this is class content
\newtoks{\copyrtyr}
\newtoks{\acmcopyr}
\newtoks{\boilerplate}
\def\CopyrightYear#1{\global\copyrtyr{#1}}
\def\crdata#1{\global\acmcopyr{#1}}
\def\permission#1{\global\boilerplate{#1}}
\newcommand{\toappear}{\the\copyrtyr\ \the\acmcopyr\ \the\boilerplate}
%End of class content
% Now set the values of the token registers (can be done later on too)
\CopyrightYear{2015}
\crdata{Groucho Marx}
\permission{No copying allowed}
\begin{document}
% Call \toappear here or later on
\toappear
% Redefine the register contents
\CopyrightYear{2016}
\crdata{Harpo Marx}
\permission{All copying is allowed}
\toappear
\end{document}