我正在使用此处的模板:https://www.overleaf.com/16456399bnxqhtkjwzft#/63153901/
我试图通过在文件中进行设置来使我的名字在出版物列表中以粗体显示.tex
:
\myname{de\bibnamedelima Klein}{Niek}
并在.sty
文件中
\newcommand{\myname}[2]{%
\def\@mylastname{#1}%
\def\@myfirstname{#2}%
}
\renewcommand*{\mkbibnamefamily}[1]{%
\ifboolexpr{ test {\ifdefstrequal{\namepartfamily}{\@mylastname}}
and
test {\ifdefstrequal{\namepartgiven}{\@myfirstname}}}
{\textbf{#1}}%
{#1}%
}
\renewcommand*{\mkbibnamegiven}[1]{%
\ifboolexpr{ test {\ifdefstrequal{\namepartfamily}{\@mylastname}}
and
test {\ifdefstrequal{\namepartgiven}{\@myfirstname}}}
{\textbf{#1}}%
{#1}%
}
在.bib
文件中我的名字写为:
de Klein, Niek
但是,因为我的姓氏由两部分组成,所以它不会将其加粗。当我Klein, Niek
在 bib 文件和\myname{Klein}{Niek}
tex 文件中将我的名字更改为时,或者当我Klein, Niek de
在 bib 文件和\myname{Klein}{Niek\bibnamedelima de}
tex 文件中将我的名字更改为时,它确实正确地将我的名字加粗。
因此,如果我将其作为两个名字,那么两部分名称确实有效,但是如果我将其作为两个姓氏,则无效。
可编译的片段:
cv.tex
\documentclass[a4paper,skipsamekey,11pt,british]{curve}
\usepackage{settings}
\addbibresource{own-bib.bib}
\myname{de\bibnamedelima Klein}{Niek}
\excludecomment{fullonly}
\begin{document}
\input{publications}
\end{document}
settings.sty
\RequirePackage[main=british]{babel}
\raggedright
\RequirePackage{fontawesome}
\RequirePackage[a4paper,nohead,nofoot,hmargin=2.25cm,vmargin=2cm]{geometry}
\RequirePackage{relsize}
\RequirePackage[dvipsnames,svgnames]{xcolor}
\RequirePackage{tikz}
\usetikzlibrary{shapes,shadows}
\RequirePackage{comment}
\definecolor{SwishLineColour}{HTML}{88AC0B}
\definecolor{MarkerColour}{HTML}{B6073F}
% If you're not a researcher nor an academic, you probably don't need biblatex; delete this line.
\RequirePackage[backend=biber,bibstyle=apa,sorting=ydnt,uniquename=init,maxnames=7,defernumbers=true]{biblatex}
\DeclareLanguageMapping{british}{british-apa}
\RequirePackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,text=white,fill=MarkerColour!80!black,font=\sffamily\scriptsize\bfseries,inner sep=1pt,text height=1.35ex,minimum width=1.5em,text centered] (char) {#1};}}
\newcounter{bibitem}
\AtBeginBibliography{\setcounter{bibitem}{1}}
\AtEveryBibitem{\makebox[2.5em][l]{\circled{\thebibitem}\stepcounter{bibitem}}}
% \renewcommand{\bibfont}{\small}
\setlength{\bibitemsep}{1.5ex}
\setlength{\bibhang}{2.7em}
\NewBibliographyString{retrieved}
\NewBibliographyString{from}
\DefineBibliographyStrings{british}{
from = {\textcolor{MarkerColour!80!black}{\faLink}},
retrieved = {}
}
\headerscale{1}
%\setlength{\headerspace}{6pt}
\rubricfont{\Large\bfseries\sffamily}
\setlength{\rubricspace}{2pt}
%\setlength{\rubricafterspace}{-9pt}
\setlength{\rubricafterspace}{-3pt}
\setlength{\subrubricspace}{3pt}
\setlength{\subrubricbeforespace}{4pt}
\def\@@rubrichead#1{%
\begin{tikzpicture}[baseline]%\
\shade[left color=black!40!white, right color=white] rectangle (\@almosttextwidth,2.5pt);
\node[font={\@rubricfont},inner sep=0pt,text ragged,anchor=south west,text depth=.5ex,text height=1.5ex] at (1pt,2pt) {#1};
\end{tikzpicture}%
\vspace\rubricspace%
}
\subrubricfont{\large\bfseries\sffamily}
\subrubricalignment{l}
\newcommand{\makefield}[2]{\makebox[1.5em]{\color{MarkerColour!80!black}#1} #2\hspace{2em}}
\keyalignment{r}
\rubricalignment{l}
\renewcommand{\arraystretch}{1.25}
\urlstyle{tt}
\newcommand{\prefixmarker}[1]{\def\@prefixmarker{#1}}
\def\@prefixmarker{\relscale{.9}\faBookmark}
\prefix{%
\hspace*{-1ex}
\color{MarkerColour!80!black}\@prefixmarker%
\hspace*{1ex}%
}
\newcommand{\makerubrichead}[1]{\vskip\baselineskip\@@rubrichead{#1}}
\defbibheading{subbibliography}{\vskip\subrubricbeforespace{\@subrubricfont\hspace{3pt}#1}\par}
\defbibfilter{booksandchapters}{%
( type=book or type=incollection )
}
\newcommand{\myname}[2]{%
\def\@mylastname{#1}%
\def\@myfirstname{#2}%
}
\renewcommand*{\mkbibnamefamily}[1]{%
\ifboolexpr{ test {\ifdefstrequal{\namepartfamily}{\@mylastname}}
and
test {\ifdefstrequal{\namepartgiven}{\@myfirstname}}}
{\textbf{#1}}%
{#1}%
}
\renewcommand*{\mkbibnamegiven}[1]{%
\ifboolexpr{ test {\ifdefstrequal{\namepartfamily}{\@mylastname}}
and
test {\ifdefstrequal{\namepartgiven}{\@myfirstname}}}
{\textbf{#1}}%
{#1}%
}
\RequirePackage[colorlinks=true,allcolors=black,breaklinks=true]{hyperref}
own-bib.bib
@article{example},
title={Some titel},
author={de Klein, Niek and Other, Authors},
journal={Journal},
volume={5},
pages={470},
year={2015},
publisher={Publisher}
}
答案1
您可以使用biblatex
的字段注释功能来实现此目的。使用它们,您应该在 bib 文件中使用类似以下内容来指示注释author+an = {1=mynamebold},
(1
表示列表的第一作者,mynamebold
是注释名称)。
然后,您可以重新定义名称部分宏,以便在注释存在的情况下有条件地使名称变为粗体。
\documentclass[british]{article}
\usepackage{babel}
\usepackage[bibstyle=apa]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{example,
title={Some titel},
author={de Klein, Niek and Other, Authors},
author+an = {1=mynamebold},
journal={Journal},
volume={5},
pages={470},
year={2015},
publisher={Publisher}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\renewcommand*{\mkbibnamegiven}[1]{%
\ifitemannotation{mynamebold}
{\textbf{#1}}
{#1}}
\renewcommand*{\mkbibnamefamily}[1]{%
\ifitemannotation{mynamebold}
{\textbf{#1}}
{#1}}
\renewcommand*{\mkbibnameprefix}[1]{%
\ifitemannotation{mynamebold}
{\textbf{#1}}
{#1}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案2
就biblatex
你姓氏而言,德克莱因, 这是克莱因当您输入您的姓名author = {de Klein, Niek}
为德被视为前缀/von 部分。传统 BibTeX 知道四个名称部分(斜线前的术语是biblatex
的名称,另请参阅Biblatex 3.3 名称格式,斜线后面的术语是 BibTeX 的名称)
- 姓氏,此处克莱因
- 此处为名字尼克
- 前缀/von 部分,这里德
- 后缀/次要部分,这里
<empty>
文件中的名称.bib
将按照某些规则进行解析,以将其拆分为这四个部分。请参阅我应该如何在 bib 文件中输入作者姓名?
名字前缀不被视为姓氏的固定组成部分,因为某些国家/地区的传统对名字前缀的处理方式不同。例如,在德语文本中,可能会将“von”、“van”等前缀视为附加名字,并出于排序目的将其显示为附加名字(贝多芬,路德维希·凡)或前缀与姓氏一起显示,但出于排序目的而被忽略(路德维希·凡·贝多芬排序于乙)。如果将前缀视为其自身的一部分,这会更容易。
这意味着如果你尝试\myname{Klein}{Niek}
根据输出格式,你可能会得到
德克莱因、尼克
尼克,克莱因德
尼克德克莱因
以上选项都不完全符合你的要求,因为德从来没有加粗,这在第三个例子中看起来非常奇怪,并且在视觉上分裂了德在其他两个例子中,你的名字是这样的。此外,有人打电话给尼克·克莱恩(没有德) 也将被突出显示。
我建议你为粗体名称找到不同的解决方案使用 biblatex 将特定作者设为粗体我最喜欢的解决方案是我的答案
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\makeatletter
\def\hlblx@bibfile@name{\jobname -boldnames.bib}
\newwrite\hlblx@bibfile
\immediate\openout\hlblx@bibfile=\hlblx@bibfile@name
\newcounter{hlblx@name}
\setcounter{hlblx@name}{0}
\newcommand*{\hlblx@writenametobib}[1]{%
\stepcounter{hlblx@name}%
\edef\hlblx@tmp@nocite{%
\noexpand\AfterPreamble{%
\noexpand\setbox0\noexpand\vbox{%
\noexpand\hlblx@getmethehash{hlblx@name@\the\value{hlblx@name}}}}%
}%
\hlblx@tmp@nocite
\immediate\write\hlblx@bibfile{%
@misc{hlblx@name@\the\value{hlblx@name}, author = {\unexpanded{#1}}, %
options = {dataonly=true},}%
}%
}
\AtEndDocument{%
\closeout\hlblx@bibfile}
\addbibresource{\hlblx@bibfile@name}
\newcommand*{\hlbxl@boldhashes}{}
\DeclareNameFormat{hlblx@hashextract}{%
\xifinlist{\thefield{hash}}{\hlbxl@boldhashes}
{}
{\listxadd{\hlbxl@boldhashes}{\thefield{fullhash}}}}
\DeclareCiteCommand{\hlblx@getmethehash}
{}
{\printnames[hlblx@hashextract][1-999]{author}}
{}
{}
\newcommand*{\addboldnames}{\forcsvlist\hlblx@writenametobib}
\newcommand*{\resetboldnames}{\def\hlbxl@boldhashes{}}
\newcommand*{\mkboldifhashinlist}[1]{%
\xifinlist{\thefield{hash}}{\hlbxl@boldhashes}
{\mkbibbold{#1}}
{#1}}
\makeatother
\DeclareNameWrapperFormat{boldifhashinlist}{%
\renewcommand*{\mkbibcompletename}{\mkboldifhashinlist}%
#1}
\DeclareNameWrapperAlias{sortname}{default}
\DeclareNameWrapperAlias{default}{boldifhashinlist}
\addboldnames{Niek de Klein}
\begin{filecontents}{\jobname.bib}
@article{example,
title = {Some titel},
author = {de Klein, Niek and Other, Authors},
journal = {Journal},
volume = {5},
pages = {470},
year = {2015},
publisher = {Publisher},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,example}
\printbibliography
\end{document}
它使用了一些机制,让你能够像在文件中输入一样输入你的名字.bib
。答案是基于奥黛丽的回答使用哈希。遗憾的是,Audrey 的答案本身并未将名称前缀考虑在名称比较中,因此 Niek de Klein 和 Niek Klein 都会被突出显示。
編輯使用更优雅的版本来格式化完整名称。\DeclareNameWrapperFormat
和\mkbibcompletename
仅分别在 v3.12 (2018-10-30) 和 v3.13 (2019-08-17) 中可用biblatex
。如果您使用的是旧版本的,请参阅编辑历史biblatex
。
答案3
我在使用 Overleaf 的 Europass CV 模板时也遇到了类似的问题。虽然我猜 @moewe 的答案可能对我有用,但我无法真正理解它,而且发现它对我来说太复杂了,因此我尝试找到自己的方法。我最终将样式文件 europasscv-bibliography.sty 的部分内容重写为我自己的版本 (europasscv-bibliography_own.sty),如下所示:
% Note the new package name
\ProvidesPackage{europasscv-bibliography_own}
[Additional macros for bibliography support in europasscv]
\RequirePackage{biblatex-ext-tabular}
\RequirePackage{longtable}
\newrobustcmd*{\defecvbibtabulartwocolumn}[5]{%
\long\csdef{extblxtab@env@#1}{#2}%
\long\csdef{extblxtab@endenv@#1}{#3}%
\long\csdef{extblxtab@tabrow@format@#1}{%
\if@ecvdebug\cellcolor{yellow!25}\fi\anchorlang{#4} & \if@ecvdebug\cellcolor{blue!25}\fi \driver{#5}\\
}%
}
\defecvbibtabulartwocolumn{bibtabular}
{\setlength{\LTpre}{\medskipamount}%
\setlength{\LTpost}{\medskipamount}%
\renewcommand*{\arraystretch}{1.2}%
\begin{longtable}[t]{@{}R{\ecv@leftcolwidth}@{\hspace{\ecv@colsep}}p{\ecv@rightcolwidth}@{}}}%
{\end{longtable}}
{\selectecvfont\printtext[labelalphawidth]{%
\printfield{labelprefix}%
\printfield{labelalpha}%
\printfield{extraalpha}}%
\printtext[labelnumberwidth]{%
\printfield{labelprefix}%
\printfield{labelnumber}}}{\selectecvfont}
% My own new definitions start here
% the original command had only 3 entries, without the prefix name
\newcommand*{\ecvbibhighlight}[4]{%
\def\prefname{#1}%
\def\lastname{#2}%
\def\firstname{#3}%
\def\firstinit{#4}}
\ecvbibhighlight{}{}{}{}
\def\instring#1#2{TT\fi\begingroup
\edef\x{\endgroup\noexpand\in@{#1}{#2}}\x\ifin@}
% usage:
% \if\instring{a}{abcdef}\message{YES}\else\message{NO}\fi
\renewcommand{\mkbibnamegiven}[1]{%
\if\instring{\lastname}{\namepartfamily}%
{%
\if\instring{\firstname}{\namepartgiven}%
{\mkbibbold{#1}}%
\else%
{%
\if\instring{\firstinit}{\namepartgiven}%
{\mkbibbold{#1}}%
\fi%
}%
\fi%
}%
\else%
{#1}%
\fi%
}
\renewcommand{\mkbibnamefamily}[1]{%
\if\instring{\lastname}{\namepartfamily}%
{%
\if\instring{\firstname}{\namepartgiven}%
{\mkbibbold{#1}}%
\else%
{%
\if\instring{\firstinit}{\namepartgiven}%
{\mkbibbold{#1}}%
\fi%
}%
\fi%
}%
\else%
{#1}%
\fi%
}
\endinput
第一部分是针对 Europass 格式定义的新表格环境,我没有对此进行任何更改。第二部分是用粗体突出显示所选作者的姓氏由两个单词组成。
然后,在正文中,我将新包命名为:
\usepackage{europasscv-bibliography_own}
我使用了粗体突出显示的新定义:
\ecvbibhighlight{De}{Vico}{Luca}{L.}
并且一切正常,无需重新格式化参考书目文件。
定义\instring
取自这里