使用 biblatex 替换非 ASCII 字符,第 2 部分

使用 biblatex 替换非 ASCII 字符,第 2 部分

这是对这个问题的后续回答无法使用 biblatex 替换非 ASCII 字符.bib. 目的是用其他字符串替换文件条目中的某些字符串。

现在可以正常编译以下文档xelatex

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1968,
    AUTHOR = "John Lennon",
    TITLE = "xåy",
    YEAR = "1968"}
\end{filecontents}
\DeclareSourcemap{
  \maps[datatype = bibtex]{
    \map{
       \step[fieldsource = title,
          match = \regexp{xåy}, 
          replace = {abc}]
    }
  }
}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

但是当我使用通用宏\aa而不是时å,它会失败:

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1968,
    AUTHOR = "John Lennon",
    TITLE = "x{\aa}y",
    YEAR = "1968"}
\end{filecontents}
\DeclareSourcemap{
  \maps[datatype = bibtex]{
    \map{
       \step[fieldsource = title,
          match = \regexp{xåy}, 
          replace = {abc}]
    }
  }
}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

除了用 UTF-8 字符替换文件\aa中的宏之外,还有其他方法可以解决这个问题吗?.bibå

答案1

正则表达式会准确查找您指定的内容;唯一需要记住的是,在此过程之前会进行 UTF-8 转换。因此,BibTeX 输入

title = {x{\aa}y},

被 Biber 转换x{å}y为,这就是你需要搜索/替换的内容。这与你输入

title = {xåy}

因为没有大括号。

由于 BibTeX 数据库格式要求在重音符号周围加括号,因此最好在正则表达式末尾解决这个问题。因此

\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1968,
    AUTHOR = "John Lennon",
    TITLE = "x{\aa}y",
    YEAR = "1968"}
\end{filecontents}
\DeclareSourcemap{
  \maps[datatype = bibtex]{
    \map{
       \step[fieldsource = title,
          match = \regexp{x{å}y}, 
          replace = {abc}]
    }
  }
}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

应该可以正常工作。

相关内容