使用 Biber 和 Biblatex 自动替换字段中的空格

使用 Biber 和 Biblatex 自动替换字段中的空格

我有一个相当大的 .bib 文件,其中的字段可能包含空格(例如,“series”字段可以是“SIGMOD '99”)。当我打印参考书目时,这些空格会断开一些行,这很不愉快。我正在使用 XeLateX 和 Biblatex 以及 Biber。

我想自动将这些字段中的空格替换为不间断空格。我尝试使用DeclareSourcemap,但没有成功。以下是我写的:

\DeclareSourcemap{ 
  \maps[datatype=bibtex]{
    \map{
       \step[fieldsource=series,
            match={\ }, replace={~}]
      }
  }      
}

此代码实际上删除了空格(“SIGMOD '99”显示为“SIGMOD'99”),与 相同\nobreakspace~用替换\,会产生类似于 的结果SIGMOD-kern+.1667em elax ’00

renewbibmacro我也没有成功StrSubstitute。我使用了以下renewbibmacro

\renewbibmacro*{series+number}{%
  \setunit*{\addnbspace}%
  \StrSubstitute{\printfield{series}}{ }{~}%
  \printfield{number}%
  \newunit}

有什么想法吗?.. 我也对有关良好做法的评论感兴趣。

编辑:这里是 MWE:

\documentclass[10pt]{article}

\usepackage{fontspec}
\usepackage[backend=biber]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=series,
            match={\ }, replace={\nobreakspace}]
      }
  }
}

\begin{filecontents}{bib1.bib}
@article{some:article:1964,
    author   = "Mister Smart",
    title    = {A very difficult narrative of sub-atomic particles in the diary of Louis XIV},
    journal  = {Journal for Advanced Thinking},
    series = {SIGMOD '99},
}
\end{filecontents}
\addbibresource{./bib1.bib}

\begin{document}
Here is an example of text \cite{some:article:1964}.
\printbibliography
\end{document}

编译时,您可以看到字段中的空格series消失了,我希望将其替换为不间断空格。

答案1

匹配和替换使用正则表达式,LaTeX 也能看到输入。所以如果你没有正确地转义所有特殊的正则表达式和乳胶输入,就会发生有趣的事情。通常最好将所有内容放在命令中\regexp,然后使用正则表达式转义(例如\\n换行符\n)。

您可以使用这个源图:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=series,
            match={\regexp{\s}}, replace={\regexp{\\nobreakspace\x20}}]
      }
  }
}

这会在 bbl 中给出以下条目:

\field{series}{SIGMOD\nobreakspace '99}

\x20是为了在命令后面得到一个文字空格,以避免后面跟着字母时出现问题。

另一种方法是

 match={\ }, replace={\string\\nobreakspace\string\x20}]

但在我看来,这并不太清楚。

这是波浪符号:

 match={\regexp{\s}}, replace={\regexp{~}}]

但是如果你不知道波浪号在正则表达式中是否是特殊字符,那么额外的反斜杠不会造成损害:

match={\regexp{\s}}, replace={\regexp{\~}}]

相关内容