How do I make some reference entries bold in bibtex?
[Tex/LaTex] Making bibtex reference entry bold
bibtexbold
Related Solutions
Assuming numeric citations, here's a way: put the following code in your document preamble.
\usepackage{xparse}
\ExplSyntaxOn
\clist_new:N \g_boldcite_list_clist
\cs_new:Npn \boldcite_checkkey:n #1
{
\clist_if_in:NnTF \g_boldcite_list_clist { #1 } { \bfseries } { \mdseries } \boldcite_bibitem:n {#1}
}
\cs_set_eq:NN \boldcite_bibitem:n \bibitem
\RenewDocumentCommand{\bibitem}{m}
{
\boldcite_checkkey:n { #1 }
}
\NewDocumentCommand{\boldreferences}{m}
{
\clist_gput_right:Nn \g_boldcite_list_clist { #1 }
}
\ExplSyntaxOff
You can then add any number of commands
\boldreferences{key1,key2}
where you list the keys of the references you want to embolden.
You can patch the name:last
, name:first-last
and name:last-first
macros defined in biblatex.def
. These are used by all of the default name formatting directives and take four arguments:
{<last name>}{<first name>}{<name prefix>}{<name affix>}
or
{<last name>}{<first name (initials)>}{<name prefix>}{<name affix>}
In the following we match only on the first and last name parts.
\documentclass{article}
\usepackage{biblatex}
\usepackage{xpatch}% or use http://tex.stackexchange.com/a/40705
\makeatletter
\newbibmacro*{name:bold}[2]{%
\edef\blx@tmp@name{\expandonce#1, \expandonce#2}%
\def\do##1{\ifdefstring{\blx@tmp@name}{##1}{\bfseries\listbreak}{}}%
\dolistloop{\boldnames}}
\newcommand*{\boldnames}{}
\makeatother
\xpretobibmacro{name:family}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:given-family}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:family-given}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:delim}{\begingroup\normalfont}{}{}
\xapptobibmacro{name:family}{\endgroup}{}{}
\xapptobibmacro{name:given-family}{\endgroup}{}{}
\xapptobibmacro{name:family-given}{\endgroup}{}{}
\xapptobibmacro{name:delim}{\endgroup}{}{}
% just for demonstration
\ExecuteBibliographyOptions{maxnames=99,giveninits}
\DeclareNameAlias{default}{family-given/given-family}
\addbibresource{biblatex-examples.bib}
\forcsvlist{\listadd\boldnames}
{{Herrmann, Wolfgang~A.}, {Herrmann, W.~A.}, {Herrmann, Wolfgang\bibnamedelima A.},
{Herrmann, W\bibinitperiod\bibinitdelim A\bibinitperiod}}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\begin{document}
\fullcite{herrmann}
\forcsvlist{\listadd\boldnames}
{{{\"{O}}fele, Karl}, {{\"{O}}fele, K.}, {{\"{O}}fele, K\bibinitperiod}}
\fullcite{herrmann}
\renewcommand*{\boldnames}{}
\forcsvlist{\listadd\boldnames}
{{Hoffmann, Stephan~D.}, {Hoffmann, S.~D.}, {Hoffmann, Stephan\bibnamedelima D.},
{Hoffmann, S\bibinitperiod\bibinitdelim D\bibinitperiod}}
\fullcite{herrmann}
\end{document}
Note that the name parts in the \boldnames
etoolbox
internal list should follow the format of the bbl
file, which is backend-dependent. The example here covers both biber and BibTeX. With biber you can also perform matching using the hash
field:
\iffieldequalstr{hash}{<hash string>}
where <hash string>
can also be found in the bbl
file.
If your name is consistently formatted in the bib
file an alternative approach is to normalize name punctuation before matching. This example allows you to specify your name in BibTeX's format regardless of the backend.
\documentclass{article}
\usepackage{biblatex}
\usepackage{xpatch}% or use http://tex.stackexchange.com/a/40705
\def\makenamesetup{%
\def\bibnamedelima{~}%
\def\bibnamedelimb{ }%
\def\bibnamedelimc{ }%
\def\bibnamedelimd{ }%
\def\bibnamedelimi{ }%
\def\bibinitperiod{.}%
\def\bibinitdelim{~}%
\def\bibinithyphendelim{.-}}
\newcommand*{\makename}[3]{\begingroup\makenamesetup\xdef#1{#2, #3}\endgroup}
\newbibmacro*{name:bold}[2]{%
\makename{\currname}{#1}{#2}%
\makename{\findname}{\lastname}{\firstname}%
\makename{\findinit}{\lastname}{\firstinit}%
\ifboolexpr{ test {\ifdefequal{\currname}{\findname}}
or test {\ifdefequal{\currname}{\findinit}} }{\bfseries}{}}
\newcommand*{\boldname}[3]{%
\def\lastname{#1}%
\def\firstname{#2}%
\def\firstinit{#3}}
\boldname{}{}{}
\xpretobibmacro{name:family}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:given-family}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:family-given}{\begingroup\usebibmacro{name:bold}{#1}{#2}}{}{}
\xpretobibmacro{name:delim}{\begingroup\normalfont}{}{}
\xapptobibmacro{name:family}{\endgroup}{}{}
\xapptobibmacro{name:given-family}{\endgroup}{}{}
\xapptobibmacro{name:family-given}{\endgroup}{}{}
\xapptobibmacro{name:delim}{\endgroup}{}{}
% just for demonstration
\ExecuteBibliographyOptions{maxnames=99,giveninits}
\DeclareNameAlias{default}{family-given/given-family}
\addbibresource{biblatex-examples.bib}
\boldname{Herrmann}{Wolfgang~A.}{W.~A.}
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\begin{document}
\fullcite{herrmann}
\boldname{{\"O}fele}{Karl}{K.}
\fullcite{herrmann}
\boldname{Hoffmann}{Stephan~D.}{S.~D.}
\fullcite{herrmann}
\end{document}
This answer was updated to work with versions >= 3.3 of
biblatex
. See the edit history for older versions ofbiblatex
. -- moewe
Best Answer
It depends on the bibliography style you're using. But you could use the common commands to choose bold typeface:
\textbf
and\bfseries
work in BibTeX entries as well.For instance, with this file
tex.bib
and that simple example
you would get:
The bold typeface has been added to the italic shape of the plain style. It's just an example, I would not combine font properties this way.
A more consistent way would be to modify the bibliography style according to your needs. Or use biblatex.