我想在我的 bib 条目开头添加一个块,格式如下
[姓氏作者年份]
当定义 shortauthor 字段时,应该使用此字段 +Year。以下示例相当简单:
\begin{filecontents*}{test.bbx}
\ProvidesFile{test.bbx}
[\abx@bbxid $Id: test.bbx,v 0.9d 2010/09/03 20:11:58 lehman beta $]
\RequireBibliographyStyle{authoryear}
\DeclareBibliographyDriver{article}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
%---add something here---
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bytranslator+others}%
\newunit\newblock
\printfield{version}%
\newunit\newblock
\usebibmacro{in:}%
\usebibmacro{journal+issuetitle}%
\newunit
\usebibmacro{byeditor+others}%
\newunit
\usebibmacro{note+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{issn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
\endinput
\end{filecontents*}
\begin{filecontents*}{MeineBib.bib}
@article{example,
author={Firstname Lastname and First Last},
title={Title},
journal={Journal},
year={Year},
pages={Pages},
}
\end{filecontents*}
\documentclass[12pt,ngerman, ]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{filecontents}
\usepackage[babel,german=quotes]{csquotes}
\usepackage [bibstyle=test]{biblatex}
\bibliography{MeineBib}
\begin{document}
\tableofcontents
\cite{example}
\printbibliography\end{document}
我猜解决方案就在这里
DeclareBibliographyDriver{article}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
%---add something here---
\usebibmacro{author/translator+others}%
但我不知道怎么做。它应该看起来像这样, 这是BibTeX 中现有的样式 ( ),但在 中却不是。natdin
biblatex
答案1
很久以前,我在德语论坛上回答过一个非常类似的问题mrunix.de。诀窍是添加\usebibmacro{cite}
到 bibmacro begentry
(默认情况下不执行任何操作)。然后选择 citestyle authoryear 和书目样式 authortitle,按作者年份标题对书目进行排序,删除重复作者的破折号......您就完成了。;-)
\documentclass{article}
\usepackage[citestyle=authoryear-comp,bibstyle=authortitle,sorting=nyt,dashed=false,%
maxcitenames=1]{biblatex}
\newcounter{mymaxcitenames}
\AtBeginDocument{%
\setcounter{mymaxcitenames}{\value{maxnames}}%
}
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup
\defcounter{maxnames}{\value{mymaxcitenames}}%
\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}%
\endgroup
}%
\quad% or \addspace
}
\DeclareNameAlias{sortname}{first-last}
\usepackage{filecontents}
\begin{filecontents}{biblatextest.bib}
@misc{A01,
author = {Author, A. and Buthor, B.},
year = {2001},
title = {Alpha},
}
\end{filecontents}
\addbibresource{biblatextest.bib}
\begin{document}
Some text \autocite{A01}.
\printbibliography
\end{document}
编辑:改进了重新定义,begentry
以允许maxnames
文内引用和参考书目之间存在差异的情况。(\defcounter
是电子工具箱宏允许[与\setcounter
]当地的重新定义计数器值。
编辑2:删除了需要手动设置自定义计数器的需要。
编辑 3:将作者姓名的格式更改为first-last
。
编辑 4:\usebibmacro{cite}
用低级命令替换,以使示例也适用于comp
样式(压缩引用中重复的作者姓名)。
(如果有人对这些零碎的改进感到疑惑:这个问题已经成为了另一个问题的“平行运动”,mrunix.de。