如何实现在 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}