\textcite 和 parencite 的作者姓名交叉引用为所有格,不链接到引用(BibLatex)

\textcite 和 parencite 的作者姓名交叉引用为所有格,不链接到引用(BibLatex)

我正在尝试链接Author Name

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}

@article{mcintosh1997rhythmic,
  title={Rhythmic auditory-motor facilitation of gait patterns in patients with Parkinson's disease.},
  author={McIntosh, Gerald C and Brown, Susan H and Rice, Ruth R and Thaut, Michael H},
  journal={Journal of Neurology, Neurosurgery \& Psychiatry},
  volume={62},
  number={1},
  pages={22--26},
  year={1997},
  publisher={BMJ Publishing Group Ltd}
}

\end{filecontents}


\documentclass[british]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}

\usepackage{csquotes}
\usepackage[%
  style=authoryear, 
  backend=biber, 
  maxcitenames=2,
  giveninits % <========================================================
]{biblatex}
\addbibresource{\jobname.bib} % \jobname to use the bib file created with filecontents
\DeclareNameAlias{sortname}{family-given}

\usepackage[unicode,colorlinks,citecolor=blue]{hyperref} % <============
\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}}


\begin{document}

According to \citeauthor{mcintosh1997rhythmic}'s studies \autocite*{mcintosh1997rhythmic}, blablabla 

\mycite{mcintosh1997rhythmic} ->        McIntosh et al. (1990)\\
\textcite{mcintosh1997rhythmic}   ->        McIntosh et al. (1997)\\
\parencite{mcintosh1997rhythmic}  ->        (McIntosh et al., 1997)\\
\printbibliography
\end{document}

输出:

在此处输入图片描述

year是链接。author name不链接它。

答案1

为了得到你想要的,你需要将以下代码添加到你的序言中:

\DeclareCiteCommand{\citeyear} % <======================================
    {}
    {(\bibhyperref{\printdate})}
    {\multicitedelim}
    {}

\DeclareCiteCommand{\parencite} % <=====================================
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{(\usebibmacro{cite}})}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\makeatletter
\let\abx@macro@textciteOrig\abx@macro@textcite
\renewbibmacro{textcite}{% <============================================
   \bibhyperref{%
   \let\bibhyperref\relax\relax%
   \abx@macro@textciteOrig%
   }%
}%
\makeatother

此代码改变命令\citeyear\parencite并根据需要\textcite添加超链接和括号。()

请参阅以下完整的 MWE

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}

@article{mcintosh1997rhythmic,
  title={Rhythmic auditory-motor facilitation of gait patterns in patients with Parkinson's disease.},
  author={McIntosh, Gerald C and Brown, Susan H and Rice, Ruth R and Thaut, Michael H},
  journal={Journal of Neurology, Neurosurgery \& Psychiatry},
  volume={62},
  number={1},
  pages={22--26},
  year={1997},
  publisher={BMJ Publishing Group Ltd}
}
\end{filecontents}


\documentclass[british]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}

\usepackage{csquotes}
\usepackage[%
  style=authoryear, 
  backend=biber, 
  maxcitenames=2,
  giveninits
]{biblatex}
\addbibresource{\jobname.bib} % \jobname to use the bib file created with filecontents
\DeclareNameAlias{sortname}{family-given}

\usepackage[unicode,colorlinks,citecolor=blue]{hyperref}
\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} % <=====================================
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{(\usebibmacro{cite}})}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\makeatletter
\let\abx@macro@textciteOrig\abx@macro@textcite
\renewbibmacro{textcite}{% <============================================
   \bibhyperref{%
   \let\bibhyperref\relax\relax%
   \abx@macro@textciteOrig%
   }%
}%
\makeatother


\begin{document}

According to \citeauthor{mcintosh1997rhythmic}'s studies 
\autocite*{mcintosh1997rhythmic}, blablabla 

\verb|\mycite|: \mycite{mcintosh1997rhythmic} ->        McIntosh et al. (1990) 

\verb|\textcite|: \textcite{mcintosh1997rhythmic}   ->        McIntosh et al. (1997) 

\verb|\parencite|: \parencite{mcintosh1997rhythmic}  ->        (McIntosh et al., 1997) 

\printbibliography
\end{document}

及其结果:

由此产生的书目

答案2

(要从超链接中排除左括号,\parencite{}我们应该使用以下命令:

\DeclareCiteCommand{\parencite} % <=====================================
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   (\printtext[bibhyperref]{\usebibmacro{cite}})}
  {\multicitedelim}
  {\usebibmacro{postnote}}

相关内容