如何在我的班级中制作一个自动标题头但带有一些用户可定义的文本?

如何在我的班级中制作一个自动标题头但带有一些用户可定义的文本?

使用我创建的文档类将输出自动标题页眉。我自己创建的文档类名为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
}

先决条件:没有任何

创建新命令的步骤:

  1. 定义宏来存储值\@<name>,例如

    \newcommand{\@schoolname}{}
    
  2. 定义宏来设置值\<name>,例如

    \newcommand{\schoolname}[1]{\gdef\@schoolname{#1}}
    
  3. 将值(通过\@<name>)添加到标题,例如

        {\centering\bfseries\sffamily
        \@schoolname
        \par}
    
  4. 标题排版后,重定向设置宏(\<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}
}

先决条件:

  1. 加载kvoptions

  2. 定义用于存储值宏的<family>选项,例如<prefix>

    \SetupKeyvalOptions{
        family=MC,
        prefix=my@
    }
    

    名字并不重要,但通常用两个或三个大写字母来命名家族,并@在前缀末尾使用。

创建新命令的步骤:

  1. 声明选项<name>(类型:字符串),例如

    \DeclareStringOption{schoolname}
    
  2. 处理所有选项\ProcessOptionsX

  3. 使用带有 的值\<prefix><name>,例如

        {\centering\bfseries\sffamily
        \my@schoolname
        \par}
    

有关更多信息,kvoptions请参阅其文档……

相关内容