使用 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{\~}}]

相關內容