在自定义类中重新排序 KOMA-Script 标题(不是标题页)

在自定义类中重新排序 KOMA-Script 标题(不是标题页)

我正在尝试为 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!

相关内容