在下面的 MWE 中,我希望将参考书目中的参考文献对齐。如您所见,第二个参考文献与第一个参考文献不一致。我正在使用该koma-moderncvclassic
包及其模板来生成此 CV 文档。是什么导致了此对齐问题?非常感谢您的帮助。
平均能量损失
\RequirePackage{filecontents}
\begin{filecontents}{MWE.bib}
@ARTICLE{2006,
title = {journalarticle},
journal = {journal},
year = {2006},
volume = {6},
pages = {19--75}
}
@BOOK{2000,
title = {Some Book},
address = {Around the Corner},
year = {2000}
}
\end{filecontents}
\documentclass[%
fontsize=11pt,%
a4paper,%
pagesize,%
headinclude,footinclude,%
headings=normal,%
]{scrartcl}
\usepackage[left=2cm,right=2cm,top=3cm,bottom=3cm]{geometry} % page layout
\usepackage{scrpage2}
\tolerance=200 % white space
\clubpenalty = 1000 % orphans
\widowpenalty = 1000 % widows
\renewcommand*{\title}{Curriculum Vitae}% für PDF
\newcommand*{\firstname}{John}
\newcommand*{\familyname}{Doe}
\newcommand*{\acadtitle}{MD, PhD}
\newcommand*{\addressstreet}{Street 70}
\newcommand*{\addresscity}{New Avenue}
\newcommand*{\address}[2]{\addressstreet{#1}\addresscity{#2}}
\newcommand*{\mobile}{+999 077777781}
\newcommand*{\email}{anyname (at) domainname.com}
\usepackage[myblue]{koma-moderncvclassic}
\renewcommand{\firstnamefont}{\fontsize{28}{26}\sffamily\mdseries\upshape} % name in smaller font
\newcommand*{\totalpagemark}{\usekomafont{pagenumber}\thepage/\pageref{lastpage}}% for page and pagetotal
\pagestyle{scrheadings}
\clearscrheadfoot
\ifoot{CV~\firstname~\familyname}
\usepackage[backend=biber,%
style=authortitle,%
sorting=ydnt%
]{biblatex}
\bibliography{MWE.bib}
\defbibheading{bibliography}[Publications]{\section{#1}}
\begin{document}
\maketitle
\section{Personal Information}
\cvline{Gender:}{Male}
\cvline{Place of Birth:}{Country}
\cvline{Date of Birith:}{1975}
% \newpage
\nocite{*}
\printbibliography
\label{lastpage}%
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% TeX-engine: xetex
%%% End:
输出
当我使用 xetex 引擎编译文档时,我得到了这种不必要的对齐:
期望
现在,如果我取消注释\newpage
上述代码中的行,我将获得正确的对齐方式,但我不想超出简历中的一页。那么如何在简历中没有新页面的情况下获得正确的对齐方式?
答案1
这是由 中的一个错误引起的问题koma-moderncvclassic.sty
。问题的真正根源在于这个包是从moderncv
类派生出来的。由于moderncv
是一个类,因此它可以定义在标准类中以其他方式定义的宏。
问题描述:bug
在moderncv
课堂上我们发现了以下定义\quote
:
\newcommand*{\quote}[1]{\def\@quote{#1}}
当然,这与\quote
(即quote
环境) 定义于scrartcl
:
\newenvironment{quote}{%
\list{}{\rightmargin\leftmargin}%
\item\relax
}{%
\endlist
}
但是包的重新定义中的代码\maketitle
包含以下内容:
...
\ifthenelse{\isundefined{%
\quote}}%
{}%
{\centering{\begin{minipage}{\quotewidth}\centering\quotestyle{\quote}\end{minipage}}%\\[2.5em]
}
...
在原始moderncv
代码中,检查的是内部定义的\@quote
,但软件包版本的作者错误地将其更改为\quote
。但由于\quote
始终由定义scrartcl
,因此它会执行条件的第二部分:
{\centering{\begin{minipage}{\quotewidth}\centering\quotestyle{\quote}\end{minipage}}
这实际上做了两件事:它将文档的其余部分放入环境中\centering
(因为首字母\centering
不在组中),并且它开始(但永远不会结束)一个quote
环境。
这就是搞砸了参考书目的缩进的原因:整个参考书目都在列表环境中(这是quote
实现的方式。)
有效\newpage
地结束该quote
环境,这就是为什么新页面的缩进是正确的。
解决方案
由于这是 中的一个错误koma-moderncvclassic.sty
,因此长期的解决方案是让作者修复它。
快速解决方法
一个非常快速的解决方法是添加
\let\quote\relax
在 之前\maketitle
。这将阻止执行错误的代码。当然,这不会让您使用\quote
来自moderncv
实现的命令或quote
来自 的环境scrartcl
。
修复错误:重新定义\maketitle
更强大的解决方案是重新定义命令\quote
以匹配moderncv
定义并修复maketitle
包的命令。
\makeatletter
\renewcommand\quote[1]{\def\@quote{#1}}
\renewcommand*{\maketitle}{%
% name and title
\begin{minipage}[b]{\maketitlenamewidth}%
\firstnamestyle{%
\firstname~}\familynamestyle{%
\familyname}%
\ifthenelse{\equal{%
\acadtitle}{}}{}{\\[1.25em]\acadtitlestyle{%
\acadtitle}}%
\end{minipage}%
% optional data
\begin{minipage}[b]{\maketitledetailswidth}%
\raggedleft\addressfont\color{addresscolor}%
\ifthenelse{\isundefined{\addressstreet}}{}{%
\maketitledetailsnewline%
\addresssymbol~\addressstreet%
\ifthenelse{\isundefined{\addresscity}}{}{\\\addresscity}}%
\ifthenelse{\isundefined{\mobile}}{}{\maketitledetailsnewline\mobilesymbol~\mobile}%
\ifthenelse{\isundefined{\phone}}{}{\maketitledetailsnewline\phonesymbol~\phone}%
\ifthenelse{\isundefined{\faxnr}}{}{\maketitledetailsnewline\faxsymbol~\faxnr}%
\ifthenelse{\isundefined{\email}}{}{\maketitledetailsnewline\emailsymbol~\emaillink{\email}}%
\ifthenelse{\isundefined{\extrainfo}}{}{\maketitledetailsnewline\extrainfo}%
\end{minipage}%
% optional photo
\ifthenelse{\isundefined{\photoname}}%
{}%
{\hspace*{\separatorcolumnwidth}%
\ifthenelse{\equal{\pictureframe}{noframe}}
{\begin{minipage}[b]{\photowidth}
\includegraphics[width=\photowidth]{\photoname}
\end{minipage}}
{\color{firstnamecolor}%
\framebox{\includegraphics[width=\photowidth]{\photoname}}}}
% optional quote
\ifthenelse{\isundefined{% <---- changed \quote to \@quote below (twice)
\@quote}}%
{}%
{{\centering{\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}}}%\\[2.5em] <----- added extra pair of braces
}%
}
\makeatother
这个包还存在一些其他问题,包括在应该使用\\[<length>]
a 的地方的自由使用。\vspace{<length>}
完整示例
下面是使用该解决方法的完整示例(我添加了一些较长的参考资料以正确显示格式,并使用了选项showframe
来geometry
清楚地显示边距。)
通常你做希望参考书目条目采用悬挂缩进格式,因为这样更容易区分每个条目。如果您确实希望参考文献与左边距齐平(我不建议这样做),您可以将长度更改\bibhang
为 0。
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Knuth1984texbook,
Author = {Knuth, D.E.},
Publisher = {Addison-Wesley, Reading, Massachusetts,},
Title = {The TEXbook, volume A of Computers and typesetting},
Year = {1984}}
@article{HauserChomskyFitch2002,
Author = {Hauser, Marc and Chomsky, Noam and Fitch, W. Tecumseh},
Journal = {Science},
Number = {5598},
Pages = {1569--1579},
Title = {The Faculty of Language: What Is It, Who Has It, and How Did It Evolve?},
Volume = {298},
Year = {2002}}
\end{filecontents}
\documentclass[%
fontsize=11pt,%
a4paper,%
pagesize,%
headinclude,footinclude,%
headings=normal,%
]{scrartcl}
\usepackage[left=2cm,right=2cm,top=3cm,bottom=3cm,showframe]{geometry} % page layout
\usepackage{scrpage2}
\tolerance=200 % white space
\clubpenalty = 1000 % orphans
\widowpenalty = 1000 % widows
\renewcommand*{\title}{Curriculum Vitae}% für PDF
\newcommand*{\firstname}{John}
\newcommand*{\familyname}{Doe}
\newcommand*{\acadtitle}{MD, PhD}
\newcommand*{\addressstreet}{Street 70}
\newcommand*{\addresscity}{New Avenue}
\newcommand*{\address}[2]{\addressstreet{#1}\addresscity{#2}}
\newcommand*{\mobile}{+999 077777781}
\newcommand*{\email}{anyname (at) domainname.com}
\usepackage[myblue]{koma-moderncvclassic}
\renewcommand{\firstnamefont}{\fontsize{28}{26}\sffamily\mdseries\upshape} % name in smaller font
\newcommand*{\totalpagemark}{\usekomafont{pagenumber}\thepage/\pageref{lastpage}}% for page and pagetotal
\let\quote\relax% undefine \quote
\pagestyle{scrheadings}
\clearscrheadfoot
\ifoot{CV~\firstname~\familyname}
\usepackage[backend=biber,%
style=authortitle,%
sorting=ydnt%
]{biblatex}
\addbibresource{\jobname.bib}
\defbibheading{bibliography}[Publications]{\section{#1}}
\begin{document}
\maketitle
\section{Personal Information}
\cvline{Gender:}{Male}
\cvline{Place of Birth:}{Country}
\cvline{Date of Birth:}{1975}
\nocite{*}
\printbibliography
\label{lastpage}%
\end{document}
如果您希望出版物列表在标题的左边缘下对齐,则bibliography
可以使用 SamCarter 的答案中对环境进行重新定义。由于我仍然认为项目应该有悬挂缩进,因此我建议进行以下重新定义:
\defbibenvironment{bibliography}
{\list {}
{\setlength{\leftmargin}{3.6cm}%
\setlength{\itemindent}{-.4cm}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\item}