我无法使用 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}