我有一個相當大的 .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{\~}}]