我正在尝试为 KOMA-Script 标题定义自定义样式,然后使用\maketitle
当前使用 KOMA-Script\setkomafont
命令和包\patchcmd
中的命令的混合的命令插入该标题etoolbox
。
为了消除任何困惑,这里有一个简短的韋萊斯:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mwe}[2015/12/07 mwe0.1]
\LoadClass[paper=a4, fontsize=11pt]{scrartcl}
\RequirePackage{etoolbox}
\ProcessOptions\relax
\setkomafont{subject}{\normalfont}
\setkomafont{title}{\normalfont\scshape}
\setkomafont{subtitle}{\normalfont}
\setkomafont{author}{\normalfont}
\setkomafont{date}{\normalfont}
\patchcmd{\@maketitle}{\huge}{\fontsize{32}{36}\selectfont}{}{}
\patchcmd{\@maketitle}{\@title}{\vspace{-18pt}\@title{}}{}{}
\patchcmd{\@maketitle}{\@subtitle}{\@subtitle{} \\ \@@subject{}}{}{} % this line apparently does not have any effect
%\patchcmd{\@maketitle}{\@subject}{}{}{} % if this line is commented out, the subject is hidden, not appended to the subtitle
\endinput
以及相应的麦格:
\documentclass{mwe}
\subject{Subject}
\title{Title}
\subtitle{Subtitle}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Further content...
\end{document}
我想要实现的是主题显示在字幕之后 - 我没有使用\publisher
或其他内置标题命令作为解决方法来保持语义正确。
对我来说,修补字幕命令似乎没有成功,可能是因为该命令的内部处理名称不同,但我在 KOMA-Script 文档中没有找到任何相关信息。
答案1
补丁已应用。以下是补丁影响的行(来自scrartcl.cls
):
{\ifx\@subtitle\@empty\else\usekomafont{subtitle}\@subtitle\par\fi}%
所以你最终会得到
{\ifx\@subtitle{} \\ \@@subject{}\@empty\else\usekomafont{subtitle}\@subtitle\par\fi}%
这意味着\ifx
条件不成立,所以\@@subject{}
等永远不会被执行(因为你告诉它只有当测试成功时才使用它)。所以位\else
被执行,这与原始代码相同。
您需要更具体地说明要修补的内容和位置:
\patchcmd{\@maketitle}{\usekomafont{subtitle}\@subtitle\par\fi}{%
{\usekomafont{subtitle}\@subtitle\par}\fi
\vskip .5em
{\ifx\@subject\@empty\else\usekomafont{subject}\@subject\par}\fi}{\typeout{OK!}}{\typeout{Oh, no!}} % this line apparently does not have any effect
注意,这里的使用非常重要\par
。可能无论如何,这都会\\
被翻译成段落结尾,但也可能不是。而且您需要一个段落分隔符来确保正确的垂直间距并避免出现错误的框。由于标题的不同部分使用不同的字体和字体大小,如果您改用换行符,垂直间距将不正确。
代码:
\begin{filecontents}{\jobname.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{\jobname}[2015/12/07 \jobname0.1]
\LoadClass[paper=a4, fontsize=11pt]{scrartcl}
\RequirePackage{etoolbox}
\ProcessOptions\relax
\setkomafont{subject}{\normalfont}
\setkomafont{title}{\normalfont\scshape}
\setkomafont{subtitle}{\normalfont}
\setkomafont{author}{\normalfont}
\setkomafont{date}{\normalfont}
\patchcmd{\@maketitle}{\huge}{\fontsize{32}{36}\selectfont}{\typeout{OK! Title size changed!}}{\typeout{Oh, no! Title still huge!}}
\patchcmd{\@maketitle}{\@title}{\vspace{-18pt}\@title{}}{\typeout{OK! Moving up!}}{\typeout{Oh, no! Stuck down here!}}
\patchcmd{\@maketitle}{\@subject}{}{\typeout{OK! Subject eliminated!}}{\typeout{Oh, no! Subject persists!}}
\patchcmd{\@maketitle}{\usekomafont{subtitle}\@subtitle\par\fi}{%
{\usekomafont{subtitle}\@subtitle\par}\fi
\vskip .5em
{\ifx\@subject\@empty\else\usekomafont{subject}\@subject\par}\fi}{\typeout{OK! Subject added!}}{\typeout{Oh, no! Could not add subject!}}
\endinput
\end{filecontents}
\documentclass{\jobname}
\subject{Subject}
\title{Title}
\subtitle{Subtitle}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Further content\dots
\end{document}
请注意,使用最后两个参数可以\patchcmd
提供有用的诊断。每个参数都应该告诉您尝试了什么以及是否成功。如果您使用通用前缀(OK!
或Oh, no!
),则可以在.log
文件中搜索所有成功或失败。例如grep OK <jobname>.log
给我
OK! Title size changed!
OK! Moving up!
OK! Subject eliminated!
OK! Subject added!