我使用 Mendeley 创建我的 bib 文件,然后\usepackage[style=authoryear,backend=biber]{biblatex}
创建我的引文。由于我有一些 URL,所以我还使用DeclareSourcemap
(如本文所建议的回答) 来替换特殊字符。这一直有效,直到我遇到 URL 中有一个 & 符号的新情况。导致问题的条目是(在mybib.bib
):
@article{EP2014,
author = {{European Parliament} and {European Council}},
journal = {Official Journal of the European Union},
number = {L173},
pages = {349--496},
title = {{Directive 2014/65/EU on markets in financial instruments and amending Directive 2002/92/EC and Directive 2011/61/EU}},
url = {https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32014L0065{\&}from=EN},
volume = {57},
year = {2014}
}
该 URL 包含{\&}
需要转义的& 符号&
。
我尝试使用DeclaresourceMap
类似的方法,但是没有用(biber 说 main.bcf 格式不正确)
\DeclareSourcemap{
\maps{
\map{ % Replaces '{\&}' with just '&'
\step[fieldsource=url,
match=\regexp{\{\\\&\}},
replace=\regexp{\&}]
}
}
}
当我查看它时,main.bcf
它被解析为
<bcf:map_step map_field_source="url" map_match="\{\\\&\}" map_replace="\&"/>
我的文本编辑器将其标记为错误(由于 & 符号没有被正确转义?至少这是最好的猜测)。
梅威瑟:
主文本
\documentclass{article}
\usepackage[style=authoryear,backend=biber]{biblatex}
\addbibresource{mybib.bib}
\DeclareSourcemap{
\maps{
\map{ % Replaces '{\&}' with just '&'
\step[fieldsource=url,
match=\regexp{\{\\\&\}},
replace=\regexp{\&}]
}
}
}
\begin{document}
\textcite{EP2014}
\printbibliography
\end{document}
然后我使用latexmk main
或pdflatex main
然后 来运行它biber main
。
知道如何解决错误并正确地转义“&”符号吗?
笔记:
由于我使用 Mendeley 创建 bib 文件,因此无法直接更改 bib 文件,而且从 Mendeley 导出时更改特殊字符的转义会弄乱其他条目,因此我认为我必须使用DeclareSourcemap
。如果您有其他选择,我也会接受。
答案1
.bcf
用于将源映射传达给 Biber 的文件本质biblatex
上是一个 XML 文件。据我所知,XML 文件并不像&
s (https://www.w3.org/TR/xml/#syntax),因此我们可以&
用其 Unicode 代码点替换\x{26}
\documentclass{article}
\usepackage[style=authoryear,backend=biber]{biblatex}
\DeclareSourcemap{
\maps{
\map{ % Replaces '{\&}' with just '&'
\step[fieldsource=url,
match=\regexp{\{\\\x{26}\}},
replace=\regexp{\x{26}}]
}
}
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{EP2014,
author = {{European Parliament} and {European Council}},
journal = {Official Journal of the European Union},
number = {L173},
pages = {349--496},
title = {{Directive 2014/65/EU on markets in financial instruments and amending Directive 2002/92/EC and Directive 2011/61/EU}},
url = {https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32014L0065{\&}from=EN},
volume = {57},
year = {2014}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\textcite{EP2014}
\printbibliography
\end{document}
但你真的应该向 Mendeley 人抱怨,URL 字段是逐字字段,其中的字符根本不应转义。
答案2
当使用 biber 工具的 XML 配置文件时,moewe 提供的答案可以通过以下方式实现:
<config>
<sourcemap>
<!-- Replace {\&} with & in URL field -->
<map>
<map_step map_field_source="url" map_match="\{\\\x{26}\}" map_replace="\x{26}"/>
</map>
</maps>
</sourcemap>
</config>