如何使用 biblatex 替换参考书目中的给定字符串?

如何使用 biblatex 替换参考书目中的给定字符串?

Mendeley 允许您使用 HTML 符号强调文章或报告标题中的拉丁名称,如下所示:

A treatise on the ecology of <I>Rattus rattus</I>

使用biblatex,标签将“逐字”传递,当然 LaTeX 无法理解它们。我想用 替换 all <I>,用 替换\emph{all 。</I>}

我尝试使用\DeclareSourceMap如下方法:

\DeclareSourcemap{ 
    \maps[datatype=bibtex]{
      \map{
           \step[fieldsource=title, match={<I>}, replace={\emph{}]
            \step[fieldsource=title,match={</I>},replace={}}]
          }
    }      
}

但是 LaTeX 当然会因为额外内容而受阻{}造成混淆。

我应该怎样摆脱括号才能使其工作?

答案1

我发现问题更多的在于让 Biber 接受看起来像 XML 标签的内容,而不是处理\emph,这可以通过将它们包装在 中\regexp并用转义符处理。最后我求助于通过字符号指定 < 和 >。

无论如何,这似乎是有效的。

\DeclareSourcemap{ 
    \maps[datatype=bibtex]{
      \map{
           \step[fieldsource=title,
                 match=\regexp{\x3cI\x3e},
                 replace=\regexp{\\emph\{}]
           \step[fieldsource=title,
                 match=\regexp{\x3c/I\x3e},
                 replace=\regexp{\}}]
          }
    }      
}

当然,正如任何人都知道的那样,使用正则表达式解析 HTML 并不能保证其稳健性。

完整 MWE

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{ratty,
  author = {Mouse, Michael},
  title  = {A Treatise on <I>rattus rattus</I>},
  publisher = {Rodent Publishers},
  date = {2012},
}
\end{filecontents}
\usepackage[style=authoryear,backend=biber]{biblatex}
\DeclareSourcemap{ 
    \maps[datatype=bibtex]{
      \map{
           \step[fieldsource=title, match=\regexp{\x3cI\x3e}, replace=\regexp{\\emph\{}]
           \step[fieldsource=title, match=\regexp{\x3c/I\x3e}, replace=\regexp{\}}]
          }
    }      
}
\addbibresource{\jobname.bib}
\begin{document}

\nocite{*}

\printbibliography

\end{document}

在此处输入图片描述

相关内容