仅显示多作者作品的所有作者,第一次使用 biblatex 引用

仅显示多作者作品的所有作者,第一次使用 biblatex 引用

有些风格手册建议,如果有两位以上的作者,则只在第一次引用时使用所有姓名,之后只使用第一作者的姓氏,后跟“et al.”

我看了看手册biblatex,但客户端找不到此设置。

下面是我正在寻找的一个例子(下面的代码) 所有名称然后等。

\begin{filecontents}{\jobname.bib}
 @article{PhysRevB.39.7347,
  title = {Eight new high-temperature superconductors with the 1:2:4 structure},
  author = {Morris, Donald E. and Nickel, Janice H. and Wei, John Y. T. and Asmar, Naggi G. and Scott, Jeffrey S. and Scheven, Ulrich M. and Hultgren, Charles T. and Markelz, Andrea G. and Post, Jeffrey E. and Heaney, Peter J. and Veblen, David R. and Hazen, Robert M.},
  journal = {Phys. Rev. B},
  volume = {39},
  issue = {10},
  pages = {7347--7350},
  numpages = {0},
  year = {1989},
  month = {Apr},
  publisher = {American Physical Society},
  doi = {10.1103/PhysRevB.39.7347},
  url = {http://link.aps.org/doi/10.1103/PhysRevB.39.7347}}
\end{filecontents}

\documentclass[11pt, a4paper]{article}

\usepackage[english]{babel}
\usepackage[autostyle]{csquotes}  % thanks http://tex.stackexchange.com/a/64383/22939

\usepackage[
  backend=bibtex,
  style=authoryear,
  natbib=true,
  maxbibnames=99,
  maxcitenames=99, % maxcitenames
]{biblatex}

\usepackage{hyperref}
\hypersetup{
  pdfborderstyle={/S/U/W 1}, % thanks, http://tex.stackexchange.com/a/26085/22939
}

\addbibresource{\jobname.bib}

\DefineBibliographyStrings{english}{%
  bibliography = {References},
}

\defbibheading{bibintocindent}[\refname]{%
  \section*{#1}%
  \addcontentsline{toc}{section}{\protect\numberline{}#1}%
  \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}

\begin{document}

\tableofcontents

\section{First section}

\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}

\printbibliography[heading=bibintocindent]

\end{document}

答案1

biblatex 用于\printnames{labelname}打印出作者姓名。因此它仅打印maxcitenames,并且至少打印mincitenames作者姓名(对于参考书目maxbibnames/ minbibnames)。

因此设置maxcitenames1默认您想要的行为:Morrs et al.,而只有在尚未看到引用时才需要完整引用。

您可以使用 -package 修补现有的 bibmacros 和 which 。使用\textcite它,您可以用 which 替换,这将打印出所有名称,无论内容如何。\cite\citet\citepxpatch\printnames{labelname}\printnames[][-\value{listtotal}]{labelname}maxcitenames

如果引用已被看到,您可以使用 进行检查\ifciteseen{}{},因此您必须手动启用citetrackerbiblatex 中的 -option(参见前言)。也许您必须调整此选项,以便它适合您的需求。


更新MWE:

\begin{filecontents}{\jobname.bib}
 @article{PhysRevB.39.7347,
  title = {Eight new high-temperature superconductors with the 1:2:4 structure},
  author = {Morris, Donald E. and Nickel, Janice H. and Wei, John Y. T. and Asmar, Naggi G. and Scott, Jeffrey S. and Scheven, Ulrich M. and Hultgren, Charles T. and Markelz, Andrea G. and Post, Jeffrey E. and Heaney, Peter J. and Veblen, David R. and Hazen, Robert M.},
  journal = {Phys. Rev. B},
  volume = {39},
  issue = {10},
  pages = {7347--7350},
  numpages = {0},
  year = {1989},
  month = {Apr},
  publisher = {American Physical Society},
  doi = {10.1103/PhysRevB.39.7347},
  url = {http://link.aps.org/doi/10.1103/PhysRevB.39.7347}}
\end{filecontents}

\documentclass[11pt, a4paper]{article}

\usepackage[english]{babel}
\usepackage[autostyle]{csquotes}  % thanks http://tex.stackexchange.com/a/64383/22939

\usepackage[
  backend=bibtex,
  style=authoryear,
  natbib=true,
  maxbibnames=99,
  maxcitenames=1,%modified
  citetracker=true%added
]{biblatex}

\usepackage{hyperref}
\hypersetup{
  pdfborderstyle={/S/U/W 1}, % thanks, http://tex.stackexchange.com/a/26085/22939
}

\addbibresource{\jobname.bib}

\DefineBibliographyStrings{english}{%
  bibliography = {References},
}

\defbibheading{bibintocindent}[\refname]{%
  \section*{#1}%
  \addcontentsline{toc}{section}{\protect\numberline{}#1}%
  \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}


%patches
\usepackage{xpatch}
\xpatchbibmacro{cite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}

\xpatchbibmacro{textcite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}

\begin{document}

\tableofcontents

\section{First section}

\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}\par\medskip
\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}
\printbibliography[heading=bibintocindent]

\end{document}


输出: 在此处输入图片描述

相关内容