regex
朋友们,我对如何将括号中的值连接到映射选项存在疑问fieldvalue
。让我们看一个简单的工作示例:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{fruits,
title = {The apple and the banana},
publisher = {Tomatopress},
editor = {Straw Berry},
author = {Annoying Orange},
year = {1970}
}
\end{filecontents*}
\usepackage[utf8]{inputenc}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=title,
fieldset=title,
match=\regexp{(\w+)\s+(\w+).*},
fieldvalue={$1}
]
\step[fieldset=title,
fieldvalue={~$2},
append
]
}
}
}
\begin{document}
Hello world \cite{fruits}.
\printbibliography
\end{document}
这里的想法很简单:获取title
密钥的前两个单词,在我的情况下$1 = The
是和$2 = apple
。输出符合预期:
请注意,在我的代码中,我使用了两个\step
':一个设置fieldvalue
为$1
,另一个附加$2
(前面有一个不间断空格)。我希望省去一步,尝试以下代码(最好使用可间断空格):
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=title,
fieldset=title,
match=\regexp{(\w+)\s+(\w+).*},
fieldvalue={$1~$2}
]
}
}
}
但它不起作用。我知道我可以使用replace
映射选项 - 实际上,这个 MWE 太简单了 - 并且这两个变量的扩展有效,但对于我们正在进行的项目,我们必须使用。我想知道如何一次性fieldvalue
在 a 中添加任意数量的变量,而不是逐步使用's 来附加值。fieldvalue
\step
有任何想法吗?:)
答案1
这是 biber 1.3 中的一个错误。请尝试使用 Sourceforge 的 1.4 版本。您还需要使用 SourceForge 的 biblatex 2.4 beta。如果您在意的话,您可能还想将$1~$2
in包装起来\regexp{}
,以阻止 biblatex 将 转换~
为(经过特殊处理,因为它最终成为 biber .bcf 文件中的 XML 属性)。\nobreakspace {}
fieldvalue