![biblatex 文内引用,具有不同的 maxbibnames](https://linux22.com/image/427564/biblatex%20%E6%96%87%E5%86%85%E5%BC%95%E7%94%A8%EF%BC%8C%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%20maxbibnames.png)
我使用 biblatex 和 biber。在我的正文中,我很高兴有标准的默认\textcite
显示,它(取决于 maxbibnames 可能会给出许多作者的名字)。这个标准默认也是我希望在参考文献中看到的(\printbibliography
)。
但是,我有一张文献综述表,我并不希望看到所有作者都显示出来。部分原因是我想将姓名放入表格列中,并在右侧显示更多信息。在这里,而且只有在这里,我才真正希望 maxbibnames=1。容易吗?
理想情况下,更好的版本可以让我发明自己的\citemystyle
。我想添加期刊缩写,例如Smith et.al. (AER, 2021)
。我会在我的 *.bib 文件中添加一个期刊缩写字段;然后,
\newcommand{\citemystyle}[1]{\citeauthorlastname[1]{#1}\citeetalifnany{#1}~%
(\citejournalabbrev{#1}, \citeyear{#1}}
其中[1]
尝试指定 citeauthorlastname 仅应获取第一作者的姓氏。
然后我就可以写作文了\citemystyle{smith2021aer}
,它就会神奇地给我Smith et.al. (AER, 2021)
。
我可能对 biblatex/biber 要求过高,但过去我对它的灵活性感到惊讶...哎呀,有时答案甚至很简单。如果很难,请不要花太多时间在这上面。我可以手动复制文本。
答案1
您可以使用字段并通过shortjournal
定义新命令。我们将 限制为 1 ,并加载宏的修改版本,称为。此宏仅在给定字段时执行,并添加逗号和空格。\mytextcite
\DeclareCiteCommand
maxnames
\setcounter{maxnames}{1}
textcite
mytextcite
\usebibmacro{shortjournal}
shortjournal
\begin{filecontents*}[overwrite]{\jobname.bib}
@article{bertram,
author = {Bertram, Aaron and Wentworth, Richard},
title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
journaltitle = {J.~Amer. Math. Soc.},
shortjournal = {JAMS},
date = 1996,
volume = 9,
number = 2,
pages = {529-571}}
\end{filecontents*}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\newbibmacro*{shortjournal}{%
\iffieldundef{shortjournal}{}
{\printfield{shortjournal}\setunit{\addcomma\space}}}
\newbibmacro*{mytextcite}{%
\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nonameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{shortjournal}%
\usebibmacro{cite:labeldate+extradate}}
{\usebibmacro{cite:shorthand}}}
{\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{shortjournal}%
\usebibmacro{citeyear}}}
\DeclareCiteCommand{\mytextcite}
{\boolfalse{cbx:parens}}
{\setcounter{maxnames}{1}%
\usebibmacro{citeindex}%
\iffirstcitekey
{\setcounter{textcitetotal}{1}}
{\stepcounter{textcitetotal}%
\textcitedelim}%
\usebibmacro{mytextcite}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}
{\usebibmacro{textcite:postnote}}
\begin{document}
\textcite{bertram}
\mytextcite{bertram}
\printbibliography
\end{document}
考虑到您的需要,可以用一种更简单的方式定义该命令,但这样它可以被更广泛地使用(我相信)。
\newcommand{\mytextcite}[1]{%
\citeauthor*{#1} (\citefield{#1}{shortjournal}, \citeyear{#1})}