Biber Sourcemap 中的 & 符号

Biber Sourcemap 中的 & 符号

我使用 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 mainpdflatex 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}

网址:https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32014L0065&from=EN.

但你真的应该向 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>

相关内容