在 fieldvalue 中连接正则表达式变量

在 fieldvalue 中连接正则表达式变量

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~$2in包装起来\regexp{},以阻止 biblatex 将 转换~为(经过特殊处理,因为它最终成为 biber .bcf 文件中的 XML 属性)。\nobreakspace {}fieldvalue

相关内容