使用 apacite 对 moderncv 中的参考文献进行逆时间顺序排序

使用 apacite 对 moderncv 中的参考文献进行逆时间顺序排序

我正在使用moderncvdocumentclass 创建我的简历,我需要参考列表以遵守 APA 指南。我知道biblatex提供排序选项,但不幸的moderncv是不支持biblatex。我正在使用multibibapacite我的参考资料分成不同的子列表。

\documentclass[11pt,a4paper,sans]{moderncv}
\moderncvstyle{casual}
\moderncvcolor{grey}
\usepackage{apacite}
\usepackage[scale=0.75]{geometry}

\firstname{John}
\familyname{Doe}

\makeatletter                           % subheadings in multibib as \subsection
\renewenvironment{thebibliography}[1]
     {\subsection*{\refname}%
      \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\makeatother

\usepackage{multibib}
\newcites{articles,conferences}{{Articles},{Conference contributions}}

\begin{document}
\maketitle

\section{References}
\nocitearticles{article1,article2}
\bibliographystylearticles{apacite}
\bibliographyarticles{articles}
\nociteconferences{conference1,conference2}
\bibliographystyleconferences{apacite}
\bibliographyconferences{conferences}

\end{document}

有没有办法apacite按年份对出版物进行排序?我尝试手动分配从 1 到n添加到 bib 文件中每个出版物的 -attributes中key,但它仅用于引用。此外,\phantom在作者姓名中添加 -characters 也不起作用。

此外,参考资料会横跨整个页面的宽度,而不是只打印在右栏中。有什么办法可以解决这个问题吗?

答案1

我还没有找到解决这个问题的自动化方法,但手动排序apacite参考文献列表\APACSortNoop是一种可能。要对条目进行排序,请{{\APACSortNoop{x}}在第一作者姓名前添加并替换X数字从 1 到n。参考文献将按升序排列,如本例所示:

@article{article1,
    Author = {{\APACSortNoop{1}}Doe, John and Jane, Doe},
    Title = {Title},
    Year = {2012},
    Journal = {Journal},
    Pages = {1--2},
    Volume = {1}
}

@article{article2,
    Author = {{\APACSortNoop{2}}Doe, John and Bar, Foo},
    Title = {Title},
    Year = {2009},
    Journal = {Journal},
    Pages = {1--2},
    Volume = {1}
}

我还找到了解决引用列表横跨两列的问题的方法。不过这很麻烦。我相信一定有更好的方法来处理这个问题。

将每个参考列表嵌入到一个小页面中,手动设置子部分和填充,如下所示,适用于 DIN A4 纸上的标准描述列宽度:

\usepackage{multibib}
\newcites{articles,conferences}{{},{}}

\section{References}
\vspace{-0.1cm}\subsection{Publications}
\vspace{-0.45cm}\hspace{3.15cm}\begin{minipage}{12.6cm}
    \nocitearticles{article1,article2}
    \bibliographystylearticles{apacite}
    \bibliographyarticles{articles}
\end{minipage}

\vspace{0.2cm}\subsection{Conference contributions}
\vspace{-0.45cm}\hspace{3.15cm}\begin{minipage}{12.6cm}
    \nociteconferences{conference1,conference2}
    \bibliographystyleconferences{apacite}
    \bibliographyconferences{conferences}
\end{minipage}

答案2

对于那些仍然遇到这个问题的人来说:moderncv似乎与现在兼容biblatex-apa。这使得可以按降序对书目进行排序(sorting=ydnt)而无需 @crash 提出的技巧。

multibib此外,我更喜欢所谓的细分书目(手册第 3.11.4 节),而不是使用多个书目(例如“论文”、“书籍”) biblatex。非常简单。这是我的 MWE:

\documentclass{moderncv}
\moderncvstyle{classic}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=apa,sortcites=true,sorting=ydnt,backend=biber]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\bibliography{test}

\usepackage{filecontents}
\begin{filecontents}{test.bib}
  @article{citation01,
    Author = {Doe, John and Roe, Jane},
    Journal = {Fancy Journal},
    Pages = {123--145},
    Title = {Lorem ipsum dolor sit amet, consectetur adipiscing elit},
    Volume = {2},
    Year = {2012}}
  @article{citation02,
    Author = {Doe, John and Roe, Jane},
    Journal = {Fancy Journal},
    Pages = {12--34},
    Title = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},
    Volume = {1},
    Year = {2014}}
  @book{citation03,
    Author = {Doe, John and Roe, Jane},
    Title = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},
    publisher = {Company},
    location = {Somewhere},
    Year = {2013}}
\end{filecontents}

\name{John}{Doe}
\title{CV}
\email{[email protected]}

\begin{document}
\makecvtitle

\section{Education}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}

\nocite{*}

\printbibheading[title={Publications}]
\printbibliography[type=article,heading=subbibliography,title={Papers}]
\printbibliography[type=book,heading=subbibliography,title={Books}]

\end{document}

答案3

详细说明\APACSortNoop@crsh提供的快捷方式:

该命令实际上比这更强大。如果您只想修复具有相同第一作者的少数参考文献的顺序,则无需\APACSortNoop在每个条目中包含从头到尾对整个列表进行排序。该命令的作用是欺骗 BibTeX 将其参数视为作者姓名字符串的一部分,尽管参数字符串本身不会作为输出打印在参考书目中。因此,该命令只会影响排序:在这种特殊情况下,条目将按参数字符串作为第一作者姓名的前缀进行排序。

您可以使用以下方法\APACSortNoop按出版年份按时间顺序列出具有相同第一作者的条目(改编@crsh 的示例):

@article{article1,
    Author = {{\APACSortNoop{Doe2012}}Doe, John and Jane, Doe},
    Title = {Title},
    Year = {2012},
    Journal = {Journal},
    Pages = {1--2},
    Volume = {1}
}

@article{article2,
    Author = {{\APACSortNoop{Doe2009}}Doe, John and Bar, Foo},
    Title = {Title},
    Year = {2009},
    Journal = {Journal},
    Pages = {1--2},
    Volume = {1}
}

@article{article3,
    Author = {Smith, John and Foo, Bar},
    Title = {Title},
    Year = {2009},
    Journal = {Journal},
    Pages = {1--2},
    Volume = {1}
}

这样,您就告诉 BibTeX 按 (1) 作者姓氏和 (2) 出版年份升序排序。请注意,对于没有发生同作者问题的条目,您不需要该命令(如article3),尽管包含它也不会有什么坏处(例如,如果您想自动执行整个过程)。

相关内容