如何将引用“A et al., 2014; 2016; B et al. 2014”更改为“A et al., 2014 & 2016; B et al., 2014”

如何将引用“A et al., 2014; 2016; B et al. 2014”更改为“A et al., 2014 & 2016; B et al., 2014”

是否可以改变

"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}

Lorem(Knuth 1984 & 1986;Sigfridsson 和 Ryde 1998)

另请参阅您之前提出的问题:如何将两个年份放在一起引用。例如 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}

Lorem(Knuth 1984 & 1986;Sigfridsson 和 Ryde 1998)

相关内容