是否可以改变
"A et al., 2014; 2016; B et al., 2014"
到
"A et al., 2014 & 2016; B et al., 2014"
我猜测:
\usepackage[backend=biber,
% style=authoryear,
style=authoryear-comp,
% citestyle=authoryear,
dashed=false,
maxcitenames=2,
maxbibnames=99,
uniquelist=false,
giveninits,
alldates=comp,
dateabbrev=false,
uniquename=false,backref=true,backrefstyle=none]{biblatex}
我想要的输出是:
(Hands et al., 2014 & 2016; Mudariki et al., 2014)
我的 MWE:
\documentclass{article}
\usepackage{xpatch}
% \usepackage[style = authoryear-comp, maxnames = 99]{biblatex}
\usepackage[backend=biber,
% style=authoryear,
style=authoryear-comp,
% citestyle=authoryear,
dashed=false,
maxcitenames=2,
maxbibnames=99,
uniquelist=false,
giveninits,
alldates=comp,
dateabbrev=false,
uniquename=false,backref=true,backrefstyle=none]{biblatex}
% to make volume (number), eg. 4(2)
\newcommand*{\volnumdelim}{}
\DeclareFieldFormat[article,periodical]{number}{\mkbibparens{#1}}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit*{\volnumdelim}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}}
\newcommand*{\jourvoldelim}{\addcomma\space}
\newcommand*{\jourserdelim}{\newunitpunct}
\newcommand*{\servoldelim}{\jourvoldelim}
\newcommand*{\volnumdatedelim}{\addspace}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\jourvoldelim}%
\iffieldundef{series}
{}
{\setunit*{\jourserdelim}%
\printfield{series}%
\setunit{\servoldelim}}%
\usebibmacro{volume+number+eid}%
\setunit{\volnumdatedelim}%
\usebibmacro{issue+date}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
% to make volume (number), eg. 4(2)
\DeclareNameAlias{sortname}{family-given} %for second and third author name
\DeclareFieldFormat{postnote}{\printtext[bibhyperref]{#1}}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{csquotes}
\addto\captionsenglish{
\renewcommand{\listfigurename}{\textsf{List of Figures}}
\renewcommand{\listtablename}{\textsf{List of Tables}}
}
% Flag for whether to add front matter to TOC
\newtoggle{fulltoc}
\toggletrue{fulltoc} % Change to \togglefalse{fulltoc} to remove front matter
\renewcommand{\contentsname}{Table of Contents}
\usepackage[unicode,colorlinks,citecolor=blue]{hyperref}
% for a chapter edited by a book
\usepackage{xpatch}
% \renewcommand*{\finalnamedelim}{\addspace\&\space}
% \renewcommand*{\intitlepunct}{\space} (to become In:)
\renewcommand{\labelnamepunct}{\space} %to delete . after (1997)
% \DeclareFieldFormat[article, incollection, unpublished]{pages}{#1} % to add in PP. (page)
\DeclareFieldFormat[article, incollection, unpublished]{title}{#1}
% \renewcommand{\bibpagespunct}{\ifentrytype{article}{\addcolon}{\addperiod\addspace}} %cancel out this in order to add in PP. (page)
% for title italic
% \DeclareFieldFormat*{title}{\mkbibemph{#1}} %for title italic in all format (conference, paper..)
\DeclareFieldFormat*{title}{#1} %for conference title delete ".."
\DeclareFieldFormat[incollection]{title}{\mkbibemph{#1}} %for incollecion title italic ONLY
\DeclareFieldFormat[thesis]{title}{\mkbibemph{#1}} %for phdthesis title italic ONLY
% for title italic
% to delete "In:" for article
\renewbibmacro{in:}{%
\ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}}}
% to delete "In:" for article
% for delete comma after Author A and Aurhor b
\DefineBibliographyExtras{english}{%
\let\finalandcomma\empty
\let\finalandsemicolon\empty
}
\renewcommand{\compcitedelim}{\space\&\space}
\DeclareNameAlias{editorin}{given-family}
\newbibmacro*{byeditor:in}{%
\ifnameundef{editor}
{}
{\printnames[editorin]{editor}%
\setunit{\addcomma\space}%
\usebibmacro{editorstrg}%
\clearname{editor}}}
\DeclareDelimFormat[textcite]{postnotedelim}{\addcolon\space}
\DeclareDelimFormat[parencite]{postnotedelim}{\addcolon\space}
% \DeclareFieldFormat{postnote}{#1}
\DeclareFieldFormat{postnote}{\printtext[bibhyperref]{#1}}
\DeclareFieldFormat{multipostnote}{#1}
% for references 's studies (year)
\renewcommand*{\nameyeardelim}{\addcomma\space}
\newcommand{\mycite}[1]{\citeauthor{#1}'s \citeyear{#1}}
\DeclareCiteCommand{\citeauthor}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printtext[bibhyperref]{\printnames{labelname}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citeyear} % <======================================
{}
{(\bibhyperref{\printdate})}
{\multicitedelim}
{}
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\renewcommand*{\postnotedelim}{\addcolon\space}%
\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\cbx@textcite}
{\renewcommand*{\postnotedelim}{\addsemicolon\space}%
\usebibmacro{cite:init}}
{\usebibmacro{citeindex}%
\usebibmacro{textcite}}
{}
{\usebibmacro{textcite:postnote}}
\makeatletter
\let\abx@macro@textciteOrig\abx@macro@textcite
\renewbibmacro{textcite}{% <============================================
\bibhyperref{%
\let\bibhyperref\relax\relax%
\abx@macro@textciteOrig%
}%
}%
\makeatother
% for references 's studies (year)
\DeclareFieldFormat{url}{Available at\addcolon\space\url{#1}}
\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\space#1}}
\DeclareFieldFormat[online]{title}{\mkbibemph{#1}}
\DefineBibliographyStrings{english}{%
urlseen = {Accessed},
}
\DefineBibliographyExtras{english}{%
\protected\def\mkdaterangecomp{%
\mkdaterangetrunc{long}}%
\protected\def\mkdaterangeterse{%
\mkdaterangetrunc{short}}%
\protected\def\mkdaterangecompextra{%
\mkdaterangetruncextra{long}}%
\protected\def\mkdaterangeterseextra{%
\mkdaterangetruncextra{short}}%
\protected\def\mkbibdatelong#1#2#3{%
\iffieldundef{#3}
{}
{\thefield{#3}%
\iffieldundef{#2}{}{\nobreakspace}}%
\iffieldundef{#2}
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
\iffieldbibstring{#1}
{\bibstring{\thefield{#1}}}
{\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{hands2014attenuated,
title={Title 1},
author={Hands, James R and Dorling, Konrad M and Abel, Peter and Ashton, Katherine M and Brodbelt, Andrew and Davis, Charles and Dawson, Timothy and Jenkinson, Michael D and Lea, Robert W and Walker, Carol and others},
journal={Journal of biophotonics},
volume={7},
number={3-4},
pages={189--199},
year={2014},
publisher={Wiley Online Library}
}
@article{hands2016brain,
title={Title 2},
author={Hands, James R and Clemens, Graeme and Stables, Ryan and Ashton, Katherine and Brodbelt, Andrew and Davis, Charles and Dawson, Timothy P and Jenkinson, Michael D and Lea, Robert W and Walker, Carol and others},
journal={Journal of neuro-oncology},
volume={127},
number={3},
pages={463--472},
year={2016},
publisher={Springer}
}
@article{mudariki2014p59diagnostic,
title={Title 3},
author={Mudariki, T and Lea, RW and Clemens, G and Baker, MJ},
journal={Neuro-oncology},
volume={16},
number={Suppl 6},
pages={vi10},
year={2014},
publisher={Oxford University Press}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{WinNT}
The sample ABC is done by \parencite{hands2014attenuated, mudariki2014p59diagnostic, hands2016brain} in a way.
\printbibliography
\end{document}
答案1
biblatex
\compcitedelim
在引文的年份之间插入-comp
。我们可以重新定义该命令以插入“与”符号。
所以通常情况下以下应该有效
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear-comp, backend=biber]{biblatex}
\renewcommand*{\compcitedelim}{\addspace\&\space}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \parencite{sigfridsson,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}
另请参阅您之前提出的问题:如何将两个年份放在一起引用。例如 Smith (1992 & 1993)?。
但在您的代码中,您已经重新定义了\compcitedelim
,但结果并不理想。这是因为您重新定义了\parencite
以获得完整链接。简单地添加\printtext[bibhyperref]
左右\usebibmacro{cite}
会使标点符号跟踪器混乱,并导致显示错误的标点符号。
消除
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\renewcommand*{\postnotedelim}{\addcolon\space}%
\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\cbx@textcite}
{\renewcommand*{\postnotedelim}{\addsemicolon\space}%
\usebibmacro{cite:init}}
{\usebibmacro{citeindex}%
\usebibmacro{textcite}}
{}
{\usebibmacro{textcite:postnote}}
\makeatletter
\let\abx@macro@textciteOrig\abx@macro@textcite
\renewbibmacro{textcite}{% <============================================
\bibhyperref{%
\let\bibhyperref\relax\relax%
\abx@macro@textciteOrig%
}%
}%
\makeatother
并将其替换为
\DeclareDelimFormat[parencite,textcite]{postnotedelim}{\addcolon\space}
这会将后记标点符号更改为冒号\parencite
。\etxtcite
如果您希望将其更改为所有引用命令,则只需
\DeclareDelimFormat{postnotedelim}{\addcolon\space}
由于此代码的大部分内容旨在获得更完整的引用命令超链接,因此这当然会从中删除名称链接\parencite
。如果您确实需要恢复它,则需要进行一些额外的工作。您需要重新定义引用宏。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear-comp, backend=biber]{biblatex}
\usepackage[colorlinks, citecolor=blue]{hyperref}
\renewcommand*{\compcitedelim}{\addspace\&\space}
\makeatletter
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\printtext[bibhyperref]{%
\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}%
\usebibmacro{cite:labeldate+extradate}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\printtext[bibhyperref]{\usebibmacro{cite:extradate}}}
{\setunit{\compcitedelim}%
\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printtext[bibhyperref]{%
\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}%
\usebibmacro{cite:labeldate+extradate}}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\newbibmacro*{citeyear}{%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\printtext[bibhyperref]{\usebibmacro{cite:label}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\printtext[bibhyperref]{\usebibmacro{cite:extradate}}}
{\setunit{\compcitedelim}%
\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\renewbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\iffieldundef{shorthand}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\printtext[bibhyperref]{\usebibmacro{cite:extradate}}}
{\setunit{\compcitedelim}%
\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}%
\savefield{labelyear}{\cbx@lastyear}}}
{\setunit{\compcitedelim}%
\printtext[bibhyperref]{\usebibmacro{cite:shorthand}}%
\global\undef\cbx@lastyear}}
{\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\printtext[bibhyperref]{\usebibmacro{cite:label}}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nonameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}}
{\printtext[bibhyperref]{\usebibmacro{cite:shorthand}}}}
{\printtext[bibhyperref]{\printnames{labelname}}%
\setunit{%
\global\booltrue{cbx:parens}%
\printdelim{nameyeardelim}\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\printtext[bibhyperref]{\usebibmacro{cite:label}}}
{\printtext[bibhyperref]{\usebibmacro{cite:labeldate+extradate}}}%
\savefield{labelyear}{\cbx@lastyear}}
{\printtext[bibhyperref]{\usebibmacro{cite:shorthand}}%
\global\undef\cbx@lastyear}}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}}%
\setunit{%
\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\textcitedelim}}
\newbibmacro*{cite:shorthand}{%
\printfield{shorthand}}
\newbibmacro*{cite:label}{%
\iffieldundef{label}
{\printfield[citetitle]{labeltitle}}
{\printfield{label}}}
\renewbibmacro*{cite:labeldate+extradate}{%
\printlabeldateextra}
\renewbibmacro*{cite:extradate}{%
\printfield{extradate}}
\makeatother
\DeclareDelimFormat{postnotedelim}{\addcolon\space}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \parencite{sigfridsson,knuth:ct:a,knuth:ct:b}
\Textcite{sigfridsson,knuth:ct:a,knuth:ct:b} ipsum
\printbibliography
\end{document}