模块化标题页

模块化标题页

如何实现在 latex(xelatex)中拥有模块化标题页,只需要在 .tex 文件中添加一个单词即可改变?

所有文件都必须在项目的目录中定义,而不是系统的其他地方(项目是版本化和共享的)。

book我在所叫的之上定义我的课程yapbook

该课程的相关部分:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{yapbook}[2010/10/04 Yet Another Project''s book class]

%------------------------------------------------------------------------------
% useful for tex programming
%------------------------------------------------------------------------------
\RequirePackage{needspace}
\RequirePackage[usenames,dvipsnames]{color}
\RequirePackage{kvoptions}

\SetupKeyvalOptions{
    family=YAPBOOK,
    prefix=YAPBOOK@
}
\DeclareStringOption[phpro]{titlepagestyle}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}

\ProcessKeyvalOptions*
\ProcessOptions

\LoadClass{book}

% here more code

\def\@maketitle{
    \RequirePackage{titlepage-\YAPBOOK@titlepagestyle}
}
\renewcommand*{\maketitle}{
    \@maketitle
    %here more stuff
}

这个类titlepage-phpro看起来是这样的:

\begin{titlepage}
    \thispagestyle{empty}
     \null
     \vskip 2em%
     \begin{center}%
      \textsc{\huge \@title}
      \vspace{1em}
      %\hrule
      \vspace{3em}
      \textit{\textbf{\shorttitle}}
      \vspace{3em}
      \hrule
      \vspace{8em}
      \authors \\
      \vspace{3em}
      \@date
     \end{center}
     \vfill
     \begin{flushright}
     O iniţiativă \emph{Yet Another Project}\\
     Homepage: \url{http://yet-another-project.github.com/}
     \end{flushright}
\end{titlepage}

现在我意识到,这是完全错误的,但我不知道如何正确地连接这些部分以使其工作。单独的乳胶代码块曾经工作过。要求在单独的文件中定义标题页,使其模块化,并且不必在“客户端代码”(.tex 主文件)中指定太多内容。

其他很重要要求是利用这个基础设施语义\include,因此客户端代码中不应该有。

完整代码可以在以下网址找到:https://github.com/yet-another-project/booktemplate

答案1

我希望我正确理解了您的问题。这是我的理解:您想通过设置类的 titlepage 选项来更改 titlepage 的样式,并且需要在单独的文件中定义 titlepage 样式。

在您的代码中,\RequirePackage在文档主体中调用,因为这是\maketitle调用的地方。我认为这就是您的方法不起作用的原因。

我已修改您的代码,根据给定的 值,在序言中输入模块化的 titlepage 定义titlepage。titlepage 样式文件定义了@\maketitle调用哪个\maketitle

班上:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{yapbook}[2010/10/04 Yet Another Project''s book class]

%------------------------------------------------------------------------------
% useful for tex programming
%------------------------------------------------------------------------------
\RequirePackage{needspace}
\RequirePackage[usenames,dvipsnames]{color}
\RequirePackage{kvoptions}

\SetupKeyvalOptions{
    family=YAPBOOK,
    prefix=YAPBOOK@
}
\DeclareStringOption[phpro]{titlepagestyle}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}

\ProcessKeyvalOptions*
\ProcessOptions

\LoadClass{book}

% here more code

\RequirePackage{titlepage-\YAPBOOK@titlepagestyle}
\renewcommand*{\maketitle}{
    \@maketitle
    %here more stuff
}

titlepage-phpro(因为它们无法在我的系统上编译所以被注释掉了)\shorttitle\authors

\ProvidesPackage{titlepage-phpro}
\RequirePackage{url}
\def\@maketitle{%
  \begin{titlepage}
      \thispagestyle{empty}
       \null
       \vskip 2em%
       \begin{center}%
        \textsc{\huge \@title}
        \vspace{1em}
        %\hrule
        \vspace{3em}
        %\textit{\textbf{\shorttitle}}
        %\vspace{3em}
        \hrule
        \vspace{8em}
        %\authors \\
        \@author
        \vspace{3em}
        \@date
       \end{center}
       \vfill
       \begin{flushright}
       O iniţiativă \emph{Yet Another Project}\\
       Homepage: \url{http://yet-another-project.github.com/}
       \end{flushright}
  \end{titlepage}%
}

测试.tex文件:

\documentclass[titlepage=phpro]{yapbook}    
\title{The title}
\author{The author}
\begin{document}
\maketitle
\end{document}

相关内容