
Меня зовут Sponge Bob Squarepants
. Я хочу найти свое имя в списке библиографических записей и выделить его жирным шрифтом.
Минимальный рабочий пример:
\documentclass{article}
\usepackage[style=numeric,citecounter=true,citetracker=true]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{myreferences.bib}
@article{sponge1,
author = {Sponge Bob Squrepants},
year = {2000},
title = {No Title},
}
@article{sponge2,
author = {Sponge Bob Squrepants and
Patrick Star},
year = {2001},
title = {No Title Again},
}
\end{filecontents*}
\addbibresource{myreferences.bib}
\begin{document}
\cite{sponge1}
\cite{sponge2}
\printbibliography
\end{document}
Поэтому мои имена в обоих случаях (см. изображение) следует выделить жирным шрифтом.
Для совместимости с другими типами стилей было бы полезно, если бы я мог определить начальную букву (т.е. S. B. Squarepants
).
Моя попытка: Я смог найти, \citename{sponge2}{author}
как извлечь имена авторов. Но я не смог найти, как искать строку.
Обновление: Найденоэто решениеиз-за пользователямойве.
%https://tex.stackexchange.com/a/334333/38244
\def\makenamesetup{%
\def\bibnamedelima{~}%
\def\bibnamedelimb{ }%
\def\bibnamedelimc{ }%
\def\bibnamedelimd{ }%
\def\bibnamedelimi{ }%
\def\bibinitperiod{.}%
\def\bibinitdelim{~}%
\def\bibinithyphendelim{.-}}
\newcommand*{\makename}[2]{\begingroup\makenamesetup\xdef#1{#2}\endgroup}
\newcommand*{\boldname}[3]{%
\def\lastname{#1}%
\def\firstname{#2}%
\def\firstinit{#3}}
\boldname{}{}{}
% Patch new definitions
\renewcommand{\mkbibnamegiven}[1]{%
\makename{\currname}{#1}%
\makename{\findname}{\firstname}%
\makename{\findinit}{\firstinit}%
\ifboolexpr{ test {\ifdefequal{\currname}{\findname}}%
or test {\ifdefequal{\currname}{\findinit}} }%
{\mkbibbold{#1}}{#1}%
}
\renewcommand{\mkbibnamefamily}[1]{%
\makename{\currname}{#1}%
\makename{\findname}{\lastname}%
\ifboolexpr{ test {\ifdefequal{\currname}{\findname}} }%
{\mkbibbold{#1}}{#1}%
}
\boldname{Squarepants}{Bob}{Sponge}
Теперь я хочу в принципе то же самое, но с подчеркиванием. Я пытался найти эквивалент подчеркивания \mkbibbold
, но пока безуспешно.
решение1
У кода, который вы сейчас используете, есть большой недостаток: он будет выделять жирным шрифтом всех людей с вашим именем, даже если это не вы.
Если вы используете код, предложенный вмой ответкВыделите конкретного автора жирным шрифтом с помощью biblatexвы можете просто заменить \mkbibbold
на \underline
, чтобы получить подчеркивание.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=numeric]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\def\nhblx@bibfile@name{\jobname -nhblx.bib}
\newwrite\nhblx@bibfile
\immediate\openout\nhblx@bibfile=\nhblx@bibfile@name
\immediate\write\nhblx@bibfile{%
@comment{Auto-generated file}\blx@nl}
\newcounter{nhblx@name}
\setcounter{nhblx@name}{0}
\newcommand*{\nhblx@writenametobib}[1]{%
\stepcounter{nhblx@name}%
\edef\nhblx@tmp@nocite{%
\noexpand\AfterPreamble{%
\noexpand\setbox0\noexpand\vbox{%
\noexpand\nhblx@getmethehash{nhblx@name@\the\value{nhblx@name}}}}%
}%
\nhblx@tmp@nocite
\immediate\write\nhblx@bibfile{%
@misc{nhblx@name@\the\value{nhblx@name}, author = {\unexpanded{#1}}, %
options = {dataonly=true},}%
}%
}
\AtEndDocument{%
\closeout\nhblx@bibfile}
\addbibresource{\nhblx@bibfile@name}
\newcommand*{\nhblx@boldhashes}{}
\DeclareNameFormat{nhblx@hashextract}{%
\xifinlist{\thefield{hash}}{\nhblx@boldhashes}
{}
{\listxadd{\nhblx@boldhashes}{\thefield{hash}}}}
\DeclareCiteCommand{\nhblx@getmethehash}
{}
{\printnames[nhblx@hashextract][1-999]{author}}
{}
{}
\newcommand*{\addboldnames}{\forcsvlist\nhblx@writenametobib}
\newcommand*{\resetboldnames}{\def\nhblx@boldhashes{}}
\newcommand*{\mkboldifhashinlist}[1]{%
\xifinlist{\thefield{hash}}{\nhblx@boldhashes}
{\underline{#1}}
{#1}}
\makeatother
\DeclareNameWrapperFormat{boldifhashinlist}{%
\renewcommand*{\mkbibcompletename}{\mkboldifhashinlist}%
#1}
\DeclareNameWrapperAlias{sortname}{default}
\DeclareNameWrapperAlias{default}{boldifhashinlist}
\addboldnames{{Sigfridsson, Emma},{Vizedom, Monika B.}}
\begin{document}
\fullcite{sigfridsson}
\fullcite{knuth:ct:a}
\fullcite{vizedom:related}
\resetboldnames\addboldnames{Donald E. Knuth}
\fullcite{knuth:ct:a}
\resetboldnames\addboldnames{Philipp Jaff{\'e}}
\fullcite{jaffe}
\end{document}
Обратите внимание, что подчеркивание в LaTeX — сложная задача, и оно \underline
не переходит на другую строку. Однако макросы подчеркивания soul
и ulem
(которые в некоторой степени поддерживают перенос строк) не могут использоваться в этом контексте, поскольку они прерываются сложными аргументами.