对于我正在准备的几份文件,我需要在参考书目中突出显示(或下划线)我的名字的出现。
有没有简单的方法可以做到这一点?
答案1
这取决于你如何准备参考书目。如果你使用 BibTeX 准备,你可以使用我今天早些时候提到的一个技巧,这需要你更改 .bib 文件;这个定义应该放在 .tex 文件中
\newcommand{\myname}[1]{\textit{Wurm, Y.}}
.bib 文件中的条目将包含
author={{\myname{wurm}} and Zauthor, X.}
然而这也取决于您希望如何在参考书目中显示名称。
如果您不想对 bib 文件采取行动,可以采用不同的方法:
\usepackage{xstring}
\let\originalbibitem\bibitem
\def\bibitem#1#2\par{%
\noexpandarg
\originalbibitem{#1}
\StrSubstitute{#2}{Wurm}{\textit{Wurm}}\par}
\bibitem
这利用了 BibTeX用空行分隔每个条目的事实。\bibitem
如果您使用 abbrv bibstyle 而不是 plain,则必须进行不同的重新定义。
对于 biblatex 来说,情况更加复杂;我得到了一些
\usepackage{xstring}
\noexpandarg\exploregroups
\makeatletter
\let\orig@blx@bbl@entry\blx@bbl@entry
\def\blx@bbl@entry#1\endentry{%
\StrSubstitute{#1}{Wurm}{\textit{Wurm}}[\Result]%
\expandafter\orig@blx@bbl@entry\Result\endentry}
\makeatother
为标准样式;但我不知道是否有副作用。可能按照 Alan Munn 在评论中建议的那样做是最好的。
答案2
如果您使用 biblatex,您可以覆盖作者列表的格式:
\usepackage[normalem]{ulem} %for \uline
\DeclareNameFormat{author}{%
\ifthenelse{\equal{#1}{YourLastName}}%
{\uline{\ifblank{#4}{}{#4\space}#1}}%
{\ifblank{#4}{}{#4\space}#1}%
\ifthenelse{\value{listcount}<\value{liststop}}%
{\addcomma\space}
{}}
这当然意味着你必须重现你正在使用的后端的格式,但它允许你例如在你的姓名首字母下划线和姓氏一起[1]。上面的例子相当基础(例如,它不关心插入“et al.”或“and”,正如某些指南所要求的那样)。
[1] 我可能错了(我无法使附加的示例起作用)但在我看来,egreg 的解决方案在.bbl
文件级别起作用,其中首字母、名字和姓氏仍然分开保存。
(编辑)
下面是重新定义的默认名称格式宏(基于文件name:first-last
中宏的定义biblatex.def
)。抱歉,我的编码风格很差。如果有人能告诉我如何正确地重构这个宏(以避免重复),那就太好了。
\usepackage[normalem]{ulem} %for \uline
\renewbibmacro*{name:first-last}[4]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
\ifthenelse{\equal{#1}{YourLastName}}% matches last name against YourLastName
{
\uline{% wrapped with \uline
\ifblank{#2}{}{\mkbibnamefirst{#2}\isdot\bibnamedelimd}%
\ifblank{#3}{}{%
\mkbibnameprefix{#3}\isdot%
\ifpunctmark{'}%
{}%
{\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
\mkbibnamelast{#1}\isdot%
\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}}}%
{% original
\ifblank{#2}{}{\mkbibnamefirst{#2}\isdot\bibnamedelimd}%
\ifblank{#3}{}{%
\mkbibnameprefix{#3}\isdot%
\ifpunctmark{'}%
{}%
{\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}%
\mkbibnamelast{#1}\isdot%
\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}}}
答案3
直到最近,我还在使用@Andrzej 的答案;我认为问题出现在从 到 TeX Live 2016
的转变过程中2017
。正如@Egon 指出的那样,这可能在较新版本的 biblatex 中不再有效。
看看biblatex 文件我做了\DeclcareNameFormat
如下修改。这对于我的目的来说已经足够好了,但我确信可以进一步改进:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{boldref,
AUTHOR = {Adam myLastName and Ben Bravo and Charlie Charlie and David Delta},
TITLE = {The title},
JOURNAL = {Journal of Examples},
PAGES = {65--78},
YEAR = 2017}
\end{filecontents}
\usepackage[backend=bibtex, bibstyle=numeric-verb, maxnames=99,
block=space, firstinits=true, terseinits=true]{biblatex}
\addbibresource{\jobname.bib}
\usepackage[normalem]{ulem} %for \uline{}
\DeclareNameFormat{given-family}{
\ifgiveninits%
{\ifthenelse{\equal{\namepartfamily}{myLastName}}%
{\uline{\namepartfamily\addspace\namepartgiveni\namepartsuffix}}%
{\namepartfamily\addspace\namepartgiveni\namepartsuffix}%
\ifthenelse{\value{listcount} < \value{liststop}}%
{\addcomma}%
{\ifthenelse{\ifmorenames}{~et \,al \adddot}}%
}{}%
}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
给予:
这是BibTeX, Version 0.99d (TeX Live 2017)
答案4
一个可以说简单的答案是使用字符串和mkbibbold
(或,或者,\mkbibemph
或\mkbibitalic
)
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@string{myself={\mkbibbold{MyLastName}, \mkbibbold{MyFirstName}}}
@article{boldref,
author = {Bravo, Ben and Charlie, Charlie and }#myself,
TITLE = {The title},
JOURNAL = {Journal of Examples},
PAGES = {65--78},
YEAR = 2017}
\end{filecontents}
\usepackage[backend=bibtex]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
除了可以简洁地实现您想要的功能之外,它还非常易于移植:只需重新定义字符串myself
即可恢复正常行为,即使用
@string{myself={MyLastName, MyFirstName}}
您的姓名将会正常打印。