原始解决方案

原始解决方案

我尝试为 杂志 它有一个非常棘手的要求:

对于作者不超过 11 位的参考文献,将列出所有作者。如果作者有 12 位或更多,则仅列出前 9 位和最后一位,其余作者则用“(...) &”代替。

例如:

Blackburn, TM、Essl, F.、Evans, T.、Hulme, PE、Jeschke, JM、Kühn, I.、Kumschick, S.、Marková, Z.、Mruga, A., (...) 和 Bacher, S. 2014. 根据外来物种对环境影响的程度对其进行统一分类。PLoS Biology 12: e1001850。

这意味着在 bst 文件中,我必须:

  • 用“(...) &”替换“et al.”回报社会

  • 让最后的作者姓名位于“(...) &”之后。这个任务对我来说并不简单。

我已经探索了 定制围兜但我没有找到我要找的东西。

答案1

原始解决方案

感谢@moewe,我终于得到了我想要的:

  1. 始终打印参考书目中的最后一位作者
  2. 在文本和参考书目中将“And”替换为与号(“&”)

最小工作示例

这是我在@moewe 链接的解决方案

\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear-comp, 
    backend=biber, 
    maxcitenames=3,
    maxbibnames=999, 
    %Remove given names in in-text citations:
    %https://tex.stackexchange.com/questions/65747/citation-style-in-biblatex-1-get-rid-of-first-names-2-remove-comma-before
    uniquename=false,
    uniquelist=false,
    %Print only first initials in bibliography:
    %https://tex.stackexchange.com/questions/21974/biblatex-abbreviated-author-names?rq=1
    giveninits=true,
    natbib = true]{biblatex}

%------------------------------------------------------------------------------
% Set up a bibfile example

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{legendre,
    series = {Developments in {Environmental} {Modelling}},
    title = {Numerical {Ecology}},
    isbn = {978-0-444-53869-7},
    publisher = {Elsevier Science},
    author = {Legendre, P. and Legendre, L.F.J.},
    year = {2012}
}
@inproceedings{cheshkov,
  author    = {Cheshkov, S. and Tajima, T. and Chiu, C. and Breitling, F.},
  title     = {Emittance control in Laser Wakefield Accelerator},
  booktitle = {American Institute of Physics Conference Series},
  date      = {2001-05},
  volume    = {569},
  pages     = {163-176},
}
@article{dehant,
  author = {Veronique Dehant and Bruce Banerdt and Philippe Lognonné and
Matthias Grott and Sami Asmar and Jens Biele and Doris Breuer and François
Forget and Ralf Jaumann and Catherine Johnson and Martin Knapmeyer and
Benoit Langlais and Le Feuvre, Mathieu and David Mimoun and Antoine Mocquet and
Peter Read and Attilio Rivoldini and Oliver Romberg and Gerald Schubert and Sue
Smrekar and Tilman Spohn and Paolo Tortora and Stephan Ulamec and Susanne
Vennerstrøm},
  journal = {Planetary and Space Science},
  number  = {1},
  pages   = {123 - 145},
  title   = {Future {Mars} geophysical observatories for understanding its
internal structure, rotation, and evolution},
  volume  = {68},
  year    = {2012},
}
\end{filecontents*}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
%------------------------------------------------------------------------------
%Replace "And" by the ampersand both in text and in bibliography 
%https://tex.stackexchange.com/questions/68053/use-ampersand-in-citations-and-bibliography-in-biblatex

\renewcommand*{\finalnamedelim}{%
  \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
    \addspace\&\space}

%------------------------------------------------------------------------------
% Make the final author name follow etint 
% https://tex.stackexchange.com/questions/377543/using-the-et-int-citation-system

\NewBibliographyString{etint}
\DefineBibliographyStrings{english}{etint = {(...)}}

\newcounter{bbx:etinttrunc}
%Number of authors before etint:
\setcounter{bbx:etinttrunc}{6} 
\newtoggle{bbx:showetint}
\DeclareNameFormat{given-family-etint}{%
  \ifnumequal{\value{listcount}}{1}
    {\toggletrue{bbx:showetint}}
    {}%
  \ifboolexpr{
    test {\ifnumless{\value{listcount}}{\value{bbx:etinttrunc}+1}}
    or test {\ifnumequal{\value{listcount}}{\value{liststop}}}
    or 
      ( test {\ifnumequal{\value{listcount}}{\value{bbx:etinttrunc}+1}}
        and test {\ifnumequal{\value{liststop}}{\value{bbx:etinttrunc}+2}})
    }
    {\ifgiveninits
       {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiveni}
          {\namepartprefix}
          {\namepartsuffix}}
        {\usebibmacro{name:given-family}
          {\namepartfamily}
          {\namepartgiven}
          {\namepartprefix}
          {\namepartsuffix}}}
    {\iftoggle{bbx:showetint}
       {\usebibmacro{name:delim}{\bibstring{etint}}%
        \bibstring{etint}%
        \togglefalse{bbx:showetint}}
       {}}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{sortname}{given-family-etint}
\DeclareNameAlias{author}{given-family-etint}
\DeclareNameAlias{editor}{given-family-etint}
\DeclareNameAlias{translator}{given-family-etint}

\begin{document}

\citep{legendre,cheshkov,dehant}
\printbibliography

\end{document}

MWE 给出: MWE 的结果

相关内容