我使用scrartcl
KOMA 提供的课程来编写所有报告。我希望标题、作者和日期位于左侧(而不是居中)。
根据我曾经在德语论坛上找到的提示,我尝试了以下操作:
\documentclass[english]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setcounter{secnumdepth}{0}
\addtokomafont{title}{\raggedright}
\addtokomafont{author}{\raggedright}
\addtokomafont{date}{\raggedright}
\begin{document}
\title{My report}
\author{Joe User}
\maketitle
\section{Introduction}
Some intro
\end{document}
这几乎产生了预期的结果,只是作者前面有一小段空白:
我在这里做错了什么吗?正确的方法是什么?
答案1
KOMA-Script 与标准类一样,使用tabular
环境来设置作者。代码如下:
\begin{tabular}[t]{c}%
\@author
\end{tabular}
如您所见,此声明中未删除初始和最终列分隔符。因此,如果您误用字体设置来尝试强制作者左对齐,则只有表格将左对齐,但表格仍以宽度为 的列分隔符开始\tabcolsep
。
您可以使用包xpatch
来更改中的表格声明\@maketitle
。如果您已经这样做了,您还可以center
用环境替换环境flushleft
,并避免字体设置的丑陋误用:
\documentclass[english]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\setcounter{secnumdepth}{0}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@maketitle}{\begin{center}}{\begin{flushleft}}{}{}
\xpatchcmd{\@maketitle}{\end{center}}{\end{flushleft}}{}{}
\xpatchcmd{\@maketitle}{\begin{tabular}[t]{c}}{\begin{tabular}[t]{@{}l@{}}}{}{}
\makeatother
\begin{document}
\title{My report}
\author{Joe User}
\maketitle
\section{Introduction}
Some intro
\end{document}
article
此补丁也可用于标准类。
如果有多个作者,以 分隔,您也可以在 的定义内\and
更改 的定义,例如\and
\maketitle
\xpatchcmd{\maketitle}{%
\def\and{%
\end{tabular}%
\hskip 1em \@plus.17fil%
\begin{tabular}[t]{c}%
}%
}{%
\def\and{%
\end{tabular}\\
\begin{tabular}[t]{@{}l@{}}%
}%
}{}{}
不再让作者并排,而是一排排地排列。最后一个补丁不适用于标准类。对于标准类,您只需重新定义\and
:
\renewcommand*\and{%
\end{tabular}\\
\begin{tabular}[t]{@{}l@{}}%
}%
没有\xpatchcmd
。
\maketitle
如果您想要一个干净的解决方案:如果您不喜欢,请不要使用默认设置。如果您需要比类提供的更多自由,请定义您自己的标题。
答案2
在 中scrartcl.cls
,您可以在 的定义中观察到以下内容\maletitle
:
[...]
{%
\usekomafont{author}{%
\lineskip .5em%
\begin{tabular}[t]{c}
\@author
\end{tabular}\par
}%
}%
[...]
正如 Schweinebacke 在评论中强调的那样,该伪影实际上是由表格的左边距引起的。因此,您可以将其重新定义如下:
{%
\usekomafont{author}{%
\lineskip .5em%
\begin{tabular}[t]{@{}c@{}}%<=== removed left and right columnsep
\@author
\end{tabular}\par
}%
}%
然而,当心!!做不是直接修改源代码scrartcl.cls
。复制一份,做一些修改并更改新文件的名称和序言(基本上,创建一个“modifiedscrartcl”类)。