使用 xkeyval 制作标题页

使用 xkeyval 制作标题页

这是我的最后一个问题,但由于尽管尝试解决相同的问题,但所问的问题却有很大不同,所以我想我会创建一个新的线程。

无论如何,我正在尝试制作一个通用的标题页以用于我的文档,我只需调用一个包即可制作一个通用格式的标题。我希望能够在序言中放入类似这样的内容:

\usepackage[course,title,date,name,id,school,department]{customTitle}

我知道我需要在包中使用表单course={Viscous flow}类型的输入xkeyval。但是,我在传递值时遇到了很多麻烦,因为 TeX 语言风格与我编写的其他代码有很大不同。

我能找到的有限信息是在这样的帖子中这个,但我真的不明白答案部分发生了什么,或者我如何能够将其应用于此。此外,考虑到多个值嵌入在一组中{ }(例如,,,course并且title全部date进入\title命令内部) ,我似乎可能需要在传递值时做一些不同的事情。

这是我当前的样式文件:

% This style file requires at least LaTeX version 2e.
\NeedsTeXFormat{LaTeX2e}

\ProvidesPackage{customTitle}[2020/07/29 Custom LaTeX title]

\RequirePackage{xkeyval}

\define@key{customTitle}{}



\ProcessOptions\relax   %end options processing and return to normal LaTeX syntax


\title{ \normalsize \textsc{[[course]]}
        \\ [2.0cm]
        \rule{\linewidth}{1.0pt} 
        \\ [0.3cm]
        \LARGE \textbf{\uppercase{[[title]]}}
        \rule{\linewidth}{2.0pt} 
        \\ [0.5cm]
        \normalsize [[date]] \vspace*{3\baselineskip}}

\author{
        \Large\textbf{[[name]]} \\
        \small Student ID [[id]] \\ [0.5cm]
        \small [[school]]\\
        \small [[department]] 
        }
        
\date{\vspace*{5\baselineskip}}

\endinput

我不知道接下来该怎么做。我也知道有一种方法可以设置默认值,但我找不到任何可以编译的可靠方法。如果包输入中未指定选项,我只是希望将其留空。

即使只是帮助\title{ }设置具有多个值的标签也会有很大帮助,希望我能在此基础上解决其余问题。谢谢!

答案1

我找到了一种使用 xkeyval 的方法,我想与大家分享。

在我努力创建一个可以轻松从每个文档中修改但每个文档中没有大量代码的标题页时,我得到了帮助。它需要使用两个自定义包,其中一个我无论如何都会使用(在我的标准序言包中),另一个需要插入在声明之后。下面是一些示例代码,所有这些都会出现在文档的序言中。

%Group 1: "variable" definitions - this will appear in a custom package if needed or in a standard preamble package which is called before everything else that follows.
\newcommand\mycourse[1]{\def\thecourse{#1}} 
\newcommand\mytitle[1]{\def\thetitle{#1}}
\newcommand\mydate[1]{\def\thedate{#1}}
\newcommand\myauthor[1]{\def\theauthor{#1}} 
\newcommand\myid[1]{\def\theid{#1}} 
\newcommand\myschool[1]{\def\theschool{#1}}
\newcommand\mydepartment[1]{\def\thedepartment{#1}}

    %This section, also a part of Group 1, is optional -- it simply sets the default values if they are not specified later.
    \mycourse{}
    \mytitle{}
    \mydate{\today}
    \myauthor{}
    \myid{}
    \myschool{}
    \mydepartment{}

例如,如果我输入\myauthor{Me!},则此声明将把“Me!”存储为\theauthor

我将这段代码留在了标准序言包中。下一部分针对每个文档,用于设置标题、日期等:

\mytitle{Some title for the document}
\mydate{The date, or alternatively, \today}
\mycourse{the course}
\myauthor{the author's name}
\myid{author's ID}
\myschool{the university or school}
\mydepartment{the department of the author}

可以在特定文档中声明这些内容。如果设置了默认值,则不必全部包含这些内容,并且将使用默认值而不会引发错误。

最后,我将最后一个代码块包含在名为的自定义包中customTitle。它实际上生成了标题(因此,如果您有另一个喜欢的标题页或类似内容,则可以在此处更改样式):

% This style file requires at least LaTeX version 2e.
\NeedsTeXFormat{LaTeX2e}

% Provide the name of your page, the date it was last updated, and a comment
\ProvidesPackage{customTitle}[2020/07/29 Generate custom LaTeX title]


\title{ \normalsize \textsc{\thecourse}
        \\ [2.0cm]
        \rule{\linewidth}{1.0pt} 
        \\ [0.3cm]
        \LARGE \textbf{\uppercase{\thetitle}}
        \rule{\linewidth}{2.0pt} 
        \\ [0.5cm]
        \normalsize \thedate \vspace*{3\baselineskip}
}

\author{
        \Large\textbf{\theauthor} \\
        \small Student ID \theid \\ [0.5cm]
        \small \theschool\\
        \small \thedepartment 
        }
        
\date{\vspace*{5\baselineskip}}


% Use \endinput to indicate that LaTeX can stop reading this file (anything after this like will be ignored)
\endinput

请注意这里是如何以 等形式使用原始变量声明的\mytitle

笔记这些代码段,无论是在另一个包中使用还是在同一个文档中使用,都必须以相同的顺序出现。逻辑顺序遵循“变量”声明(可选:默认变量设置)、设置变量,最后根据自定义变量设置生成标题页。

希望这对其他人有所帮助。

相关内容