biblatex:pdftooltip 等

biblatex:pdftooltip 等

我无法使用 biblatex 获取其余作者的 et al 部分的 pdftooltip

\newcommand\pprintnames[3]{
  \printnames[#1][#2]{#3} 
}
\cs_generate_variant:Nn \exp_args:Nnne { Nnee }
\renewbibmacro*{name:andothers}{%
  \ifboolexpr{
    test {\ifnumequal{\value{listcount}}{\value{liststop}}}
    and
    test \ifmorenames
  }
    {\ifnumgreater{\value{liststop}}{1}
       {\finalandcomma}
       {}%
     \andothersdelim\exp_args:Nne\pdftooltip{\bibstring{andothers}}{\exp_args:Nnee\pprintnames{}{\value{minnames}-\value{listtotal}}{\currentname}}}
    {}}

您知道如何修复它吗?

答案1

正如评论中提到的,\printnames这是一个打印姓名的命令。它肯定不可扩展,也不能传递给它来\pdftooltip生成有用的姓名列表。

解决这个问题的通常方法biblatex是通过循环名称来构建一个可扩展的名称列表\indexnames(因为这不应该打印任何内容)并将名称逐个附加到宏中。

这里有一些小障碍,因为我们\indexnames在内部调用\printnames(即当我们已经循环遍历名称列表时),所以我们必须避免在\currentname分配时出现无限循环。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear, maxbibnames=999]{biblatex}

\usepackage{pdfcomment}

\DeclareIndexNameFormat{grabnames}{%
  \xappto\grabbednamelist{%
    \ifnumgreater{\value{listcount}}{\value{liststart}}
      {\ifnumequal{\value{listcount}}{\value{liststop}}
         { and }
         {, }}
      {}%
    \expandonce{\namepartfamily}}%
}

\renewbibmacro*{name:andothers}{%
  \ifboolexpr{
    test {\ifnumequal{\value{listcount}}{\value{liststop}}}
    and
    test \ifmorenames
  }
    {\ifnumgreater{\value{liststop}}{1}
       {\finalandcomma}
       {}%
     \andothersdelim
     \edef\currcurrname{\currentname}%
     \numdef\nextnamenum{\value{listcount}+1}%
     \def\grabbednamelist{}%
     \indexnames[grabnames][\nextnamenum-\value{listtotal}]{\currcurrname}%
     \pdftooltip{\bibstring{andothers}}{\grabbednamelist}}
    {}}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,aksin,herrmann,murray,yoon}

\pdftooltip{Hullo}{Hullo Again}

\printbibliography
\end{document}

将鼠标悬停在“Aksın et al.”中的“et al.”上时显示的输出屏幕截图。工具提示显示“Türkmen、Artok、Çetinkaya、Ni、Büyükgüngör 和 Özkal”。

相关内容