这是对这个问题的后续回答无法使用 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}
应该可以正常工作。