
Mi nombre es Sponge Bob Squarepants
. Quiero encontrar mi nombre en la lista de entradas bibliográficas y marcarlo en negrita.
Ejemplo de trabajo mínimo:
\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}
Entonces, mis nombres en ambos casos (ver imagen) deben estar en negrita.
Para compatibilidad con otro tipo de estilos, se agradecería que pudiera detectar la inicial (es decir, S. B. Squarepants
).
Mi intento: pude encontrar \citename{sponge2}{author}
para extraer los nombres de los autores. Pero no pude encontrar cómo buscar la cadena.
Actualizacion encontradaesta solucióndebido al usuariomoewe.
%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}
Ahora quiero básicamente lo mismo, pero subrayado. Intenté buscar el equivalente subrayado de \mkbibbold
, pero todavía no tuve suerte.
Respuesta1
El código que estás usando actualmente tiene la gran desventaja de que marcará a todas las personas con tu nombre en negrita incluso si no eres tú.
Si utiliza el código sugerido enmi respuestaaPoner en negrita un autor específico usando biblatexpuedes simplemente reemplazar \mkbibbold
con \underline
para subrayar.
\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}
Tenga en cuenta que subrayar es complicado en LaTeX y \underline
no cruza líneas. Sin embargo, las macros de subrayado soul
's y ulem
' (que admiten cierto salto de línea) no se pueden utilizar en este contexto porque rompen con argumentos complejos.