在我的参考书目中,我需要缩写名字并保留二元字母和三元字母。
- John 应缩写为 J。
- Clare 应缩写为 Cl。
- Charles 应缩写为 Ch。
- Christine 应缩写为 Chr。
- Philippe 应缩写为 Ph。
- ETC。
解决方案是修改书目数据中的名字
查尔斯
到
{\relax查尔斯}
以下示例使用\DeclareSourcemap
Biblatex 中的自定义宏进行更改Charles
,{\relax Ch}arles
但我正在寻找一种更通用的解决方案,可以自动修改以两个或三个辅音开头的所有名字。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Book1,
author = {Doe, Charles},
title = {An Important Book},
publisher = {Publisher},
date = {2012},
}
@book{Book2,
author = {Doe, Charlotte},
title = {Another Important Book},
publisher = {Publisher},
date = {2014},
}
@book{Book3,
author = {Smith, Theodore},
title = {A very Important Book},
publisher = {Publisher},
date = {2016},
}
\end{filecontents}
\usepackage[style=verbose,firstinits=true, backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author,
match={Charles},
replace=\regexp{\{\\relax \x20Ch\}arles}]
}
}
}
\addbibresource{\jobname.bib}
\begin{document}
\cite{Book1}
\cite{Book2}
\cite{Book3}
\end{document}
答案1
一个可能的起点是使用 Yves de Saint-Pern 在课堂上编写的代码免责条款,下面我将翻译。
编辑 :这里提供的正则表达式也会捕获姓氏,这可能会在 Biblatex 之外引起问题,例如在使用 进行的索引中
imakeidx
。此问题的临时解决方案是此处提供。
您可以在文件中使用它biber.conf
,也可以将其包含在您的.bbx
.
有些语言可能需要为名字添加额外的正则表达式模式,但添加起来非常简单。
\DeclareStyleSourcemap{%
\maps[datatype=bibtex]{%
\map{%
% Author field
\step[fieldsource=author,%
match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)}},%
replace={\regexp{\{$1\}$3}}]% Protect last names (first last)
\step[fieldsource=author,%
match={\regexp{([^,]\s)\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))}},%
replace={\regexp{$1\{$2\}}}]% Protect last names (last, first)
\step[fieldsource=author,%
match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))([^\}])}},%
replace={\regexp{\{\\relax\{\}$1\}$3}}]% Insert \relax after abbreviating
% Editor field
\step[fieldsource=editor,%
match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)}},%
replace={\regexp{\{$1\}$3}}]% Protect last names (first last)
\step[fieldsource=editor,%
match={\regexp{([^,]\s)\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))}},%
replace={\regexp{$1\{$2\}}}]% Protect last names (last, first)
\step[fieldsource=editor,%
match={\regexp{\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))([^\}])}},%
replace={\regexp{\{\\relax\{\}$1\}$3}}]% Insert \relax after abbreviating
}}}%
就正则表达式而言,我不是专家,但我敢说该表达式的含义是这样的:
\b(Chr|Ch|Th|Ph|[B-DF-HJ-NP-TV-XZ](l|r))(\S*,)
\b
以 ( 开头的单词 ( )\S*
表示:以任意数量的非空格字符结尾:Chr
(Chris) 或Ch
(Charles) 或Th
(Thomas) 或Ph
(Philippe),或者以辅音开头的任意组合(该[B-DF-HJ-NP-TV-XZ
部分是一组范围:字母 B 到 D、F 到 H、J 到 N、P 到 T、V 到 X、Z)后跟l
或r
(Bruno 或 Claire 属于该类别)。