使用我创建的文档类将输出自动标题页眉。我自己创建的文档类名为myclass
。有没有办法让它不自动化?我想为此创建一个命令,但我真的不知道该怎么做。我只想为每一项创建一个命令:“学校名称”,下一行是“部门名称”,之后是“学院名称”的命令。这应该出现在论文的上方中央。
这是我的代码:
\AtBeginDocument
{
\begin{center}
\headrule
\par
\sffamily
\par
\par
{\Large\textbf{SchoolName}}\
{\large\textbf{College name}}\\
{\large Dept name}\\
\end{center}
\noindent Name: \makebox[3in]{\hrulefill} \hfill Section: \makebox[2in]
{\hrulefill}\\
\noindent Year\&Course: \makebox[2in]{\hrulefill} \hfill Date: \makebox[2in]
{\hrulefill}\\
\begin{center}
Goodluck!
\end{center}
我该如何为这三个命令创建命令?上面的代码会自动静态打印文本。如果用户想要修改文本内容怎么办?以下是此.cls
文件代码的示例 PDF 输出
答案1
我猜有两种可能的方法可以自动添加标题并使用用户可定义的值。第一种更简单的方法是在排版页眉之前强制用户提供信息,即\schoolname{My School}
在序言中使用:
\documentclass{myclass}
\schoolname{My School}% OK
\begin{document}
%\schoolname{My School}% ERR
Document content
\end{document}
可以通过重新定义来实现,\schoolname
以便在之后使用时导致错误\begin{document}
:
\ProvidesClass{myclass}
% base class
\LoadClassWithOptions{article}
% define the value macros
\newcommand{\@schoolname}{}
\newcommand{\schoolname}[1]{\gdef\@schoolname{#1}}
% ... etc ...
% provide the error message
\newcommand{\mycls@headerror}{%
\ClassError{myclass}{Must be in preamble}{...}%
}
% define the hook
\AtBeginDocument{%
{\centering\bfseries\sffamily
\@schoolname
\par}
\vspace{\baselineskip}
\hrule
\vspace{\baselineskip}
\let\schoolname\mycls@headerror
}
先决条件:没有任何
创建新命令的步骤:
定义宏来存储值
\@<name>
,例如\newcommand{\@schoolname}{}
定义宏来设置值
\<name>
,例如\newcommand{\schoolname}[1]{\gdef\@schoolname{#1}}
将值(通过
\@<name>
)添加到标题,例如{\centering\bfseries\sffamily \@schoolname \par}
标题排版后,重定向设置宏(
\<name>
)导致错误\let\schoolname\mycls@headerror
这第二种方式是将值作为类选项给出。我使用了kvoptions
用值来实现类选项。使用必须通过类选项定义值:
\documentclass[%
schoolname={My School}
]{myclass}
\begin{document}
Document content
\end{document}
这就是你可以处理它的方法:
\ProvidesClass{myclass}
% load package and set it up
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=MC,% MC = my class
prefix=my@% prefix to macros holding the values
}
% define the keys
\DeclareStringOption{schoolname}
% ... etc. ...
% Process the options
\ProcessKeyvalOptions*
% base class
\LoadClass{article}
% define the hook
\AtBeginDocument{%
{\centering\bfseries\sffamily
\my@schoolname% acces values by \<prefix>@<keyname>
\par}
\vspace{\baselineskip}
\hrule
\vspace{\baselineskip}
}
先决条件:
加载
kvoptions
定义用于存储值宏的
<family>
选项,例如<prefix>
\SetupKeyvalOptions{ family=MC, prefix=my@ }
名字并不重要,但通常用两个或三个大写字母来命名家族,并
@
在前缀末尾使用。
创建新命令的步骤:
声明选项
<name>
(类型:字符串),例如\DeclareStringOption{schoolname}
处理所有选项
\ProcessOptionsX
使用带有 的值
\<prefix><name>
,例如{\centering\bfseries\sffamily \my@schoolname \par}
有关更多信息,kvoptions
请参阅其文档……