使用 Biblatex 在参考书目中添加两个或三个字母的首字母

使用 Biblatex 在参考书目中添加两个或三个字母的首字母

在我的参考书目中,我需要缩写名字并保留二元字母和三元字母。

  • John 应缩写为 J。
  • Clare 应缩写为 Cl。
  • Charles 应缩写为 Ch。
  • Christine 应缩写为 Chr。
  • Philippe 应缩写为 Ph。
  • ETC。

解决方案是修改书目数据中的名字

查尔斯

{\relax查尔斯}


以下示例使用\DeclareSourcemapBiblatex 中的自定义宏进行更改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)后跟lr(Bruno 或 Claire 属于该类别)。

相关内容