我长期使用下面的宏,最初改编自另一个回答。此宏与 BibLaTeX 一起使用,自动将提供的作者加粗。
%------------------------------------------------
% Bold specific author; adapted from: https://tex.stackexchange.com/a/328286
\newcommand{\makeauthorbold}[1]{%
\DeclareNameFormat{author}{%
\ifthenelse{\value{listcount}=1}
{%
{\expandafter\ifstrequal\expandafter{\namepartfamily}{#1}{\mkbibbold{\namepartfamily\addcomma\addspace \namepartgiveni}}{\namepartfamily\addcomma\addspace \namepartgiveni}}
%
}{\ifnumless{\value{listcount}}{\value{liststop}}
{\expandafter\ifstrequal\expandafter{\namepartfamily}{#1}{\mkbibbold{\addcomma\addspace \namepartfamily\addcomma\addspace \namepartgiveni}}{\addcomma\addspace \namepartfamily\addcomma\addspace \namepartgiveni}}
{\expandafter\ifstrequal\expandafter{\namepartfamily}{#1}{\mkbibbold{\addcomma\addspace \namepartfamily\addcomma\addspace \namepartgiveni\addcomma\isdot}}{\addcomma\addspace \namepartfamily\addcomma\addspace \namepartgiveni\addcomma\isdot}}%
}
\ifthenelse{\value{listcount}<\value{liststop}}
{\addcomma\space}
}
}
%------------------------------------------------
从最近的 TeX Live 版本开始,此宏不再起作用。它现在导致一些后续环境始终被 LaTeX 视为未关闭。这会导致复杂且难以定位下游错误。
这似乎实际上得到了回答moewe 的评论,关于这个具体问题。具体来说,这似乎是由复杂的 BibLaTeX 代码的更新引起的,正如在GitHub 问题。
我现在已经将我的宏替换为 moewe 提供的更新代码,最初接受的答案。
也就是说,我更喜欢像我之前那样的宏,我只需要执行一个命令就可以在前面封装的引用列表中将指示的作者加粗(从姓氏开始搜索并匹配整个作者)。
如果有人可以提供这样一个改进的宏,我将不胜感激。
感谢 cfr 指点我另一个更新的答案,我了解到此功能在 BibLaTeX 中,人们只需使用作者注释即可实现此功能。
但是,我需要它们自动添加到我的每个条目中,最好作为\step
我现有的\map
命令。这也需要兼容我当前的作者注释解决方案,它似乎也不再适用于这些方法。
目前建议的宏(用于加粗作者姓名)似乎不适用于 BibLaTeX 的所有样式或配置。就我而言,使用一组自定义样式文件,它无法匹配我的名字并将其加粗。
如果我们假设没有作者前缀或后缀,是否可以直接让这个宏工作,而无需完全重新设计方法?或者,\map
类型解决方案来添加 author+an = {1=highlight}
被添加(如果有的话,只有在没有其他作者如此突出显示的情况下),这也与其他此类注释兼容,并且理想情况下能够自动搜索作者位置?
答案1
您最初使用的宏在biblatex
更新之前就存在严重问题。它的语法总是错误的,如果一切正常,那也只是偶然。它对所用样式的设置也具有相当大的破坏性:它只是对输出的部分进行了硬编码,并完全覆盖了一些样式功能。
我认为,对粗体名称最灵活的方法是我的答案到使用 biblatex 将特定作者设为粗体。它使用最安全的方法来比较名称(Biber 生成的哈希值),并使用侵入性最小的方法来影响名称格式(\mkbibcompletename
包装在\DeclareNameWrapperFormat
)。它应该与多种样式和其他自定义设置兼容,但根据你或你的风格,你可能需要稍微调整一下格式定义。具体来说,如果你已经重新定义了\mkbibcompletename
则必须将定义与粗体名称所需的更改相结合。(然而,这几乎是不可避免的:每一段代码都有可能覆盖预先存在的代码。因此,不能保证代码在全部情况。另外,至少清楚哪些地方需要做出改变。