在 biblatex 中将每个单破折号转换为页面范围的双破折号

在 biblatex 中将每个单破折号转换为页面范围的双破折号

我使用biblatex以下设置,

\usepackage[backend=biber, sorting=nyt, citestyle=ieee-alphabetic,
             bibstyle=ieee-alphabetic,  maxnames=3,minnames=1,maxbibnames=99]{biblatex}

我的 bib 来源来自 Mendeley,其中有一些文章,

  • 没有页面

  • 单页

  • 带有单个破折号的页面范围123-293

  • 带有短破折号的页面范围123--293

是否可以自动将 TeX 文件序言中的单破折号转换为双破折号?当我向 Mendeley 源文件添加更多论文时,这将很好地应对源文件的更新。

答案1

正如 Mico 所说,大多数 BibTeX 样式都有一个函数 ( n.dashify),它将为您执行转换(并biblatex保留此功能)。但是,也许像我一样,您更希望.bib文件内部一致。如果是这样,那么“修复”您的条目是一件非常简单的事情;例如,以下内容将输出一个新文件,其中所有形式的字符串<digit>-<digit>都已被替换为<digit>--<digit>

  sed 's/\([0-9]\)-\([0-9]\)/\1--\2/g' bibliography.bib > newbibliography.bib

或者,如果您不想要新文件,您可以使用:

  sed -i.bak 's/\([0-9]\)-\([0-9]\)/\1--\2/g' bibliography.bib  # <-- This also saves your original file with the added extention .bak (just to be safe)

本质上,这应该会改变一个包含(比如说)的文件

basket-ball
12-23
12--23
basket-8all
baske7-ball

basket-ball
12--23
12--23
basket-8all
baske7-ball

因此,标题中含有大量数字和破折号的参考书目文件可能并不适合上述单行代码。

编辑 正如我所说,您的文件可能<digit>-<digit>在字段之外的字段中有一个字符串pages。为了sed正常工作,您需要添加一个条件(关于字符串“pages”):

sed '/pages/{ s/\([0-9]\)-\([0-9]\)/\1--\2/g }' infile.bib > outfile.bib

这将需要infile.bib

basket-ball
12-23
12--23
basket-8all
baske7-ball
pages  =  {12-23},
pages  =  {12--23},
pages  =  {basket-8all}

并制作这个outfile.bib

basket-ball
12-23
12--23
basket-8all
baske7-ball
pages  =  {12--23},
pages  =  {12--23},
pages  =  {basket-8all}

此时,应该很容易根据您的更具体的需求进行定制(如果需要)。

相关内容