我的大学喜欢制定一些有趣的引用规则,为了遵守这些规则,我需要引用命令来生成
<author> (<year>)
,(<author> <year>)
和(<author> <year>.)
为此,我查看了 natbib 并发现\citet
和\cite
非常类似于我需要的。经过一些调整,我设法使它们更接近我需要的。问题出在中间的点和逗号上
这是我目前拥有的。
\documentclass[12pt,twoside,english]{article}
\usepackage[backend=biber,style=authoryear-comp,natbib,citetracker=true,%
maxcitenames=1,uniquename=false,uniquelist=false]{biblatex}
\addbibresource{cite/citedb.bib}
\usepackage{xpatch}
\renewcommand*{\finalnamedelim}{%
\addspace\&\space}
\AtEveryCitekey{\ifciteseen{}{\clearfield{namehash}}}
\xpatchbibmacro{cite}
{\printnames{labelname}}
{\ifciteseen
{\printnames{labelname}}
{\printnames[][1-99]{labelname}}}
{}
{}
\xpatchbibmacro{textcite}
{\printnames{labelname}}
{\ifciteseen
{\printnames{labelname}}
{\printnames[][1-99]{labelname}}}
{}
{}
\begin{document}
\citet{foo}
\citet{foo}
\citep{foo}
\cited{foo}
\printbibliography
\end{document}
这目前给我带来的是
Foo、Bar 和 Baz(xyz)
Foo 等人,(xyz)
(Foo 等人,xyz)
\citep
那么,我怎样才能让年份之前的逗号消失,并创建所需的命令 ? \cited
? ,并在末尾加上点,就像这样?
(Foo 等人 xyz。)
答案1
你可以用以下方法去掉逗号
\renewcommand*{\nameyeardelim}{\addspace}
事实上,natbib
兼容模式(参见blx-natbib.def
)使得这一改变成为必要,默认情况下仅使用空格。
\cited
你可以得到的期限
\newrobustcmd{\mkbibparensperiod}[1]{\mkbibparens{#1\addperiod}}
\DeclareCiteCommand{\darencite}[\mkbibparensperiod]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\newrobustcmd*{\cited}{\darencite}