![Overleaf + Mendeley:如何取消 doi 中的转义字符?](https://linux22.com/image/430621/Overleaf%20%2B%20Mendeley%EF%BC%9A%E5%A6%82%E4%BD%95%E5%8F%96%E6%B6%88%20doi%20%E4%B8%AD%E7%9A%84%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我正在同步使用 Overleaf 和 Mendeley。这非常方便,因为我在 Mendeley 中的图书馆可以直接在文档中的 overleaf 文档中使用references.bib
。
然而,当导入来自 mendeley 的 DOI 时,_
它们会被转义,这似乎{\_}
会导致编译文件中的链接断开。
不幸的是,同步文件无法编辑。所以我正在寻找一种方法来取消转义这些特征。
感谢您的帮助 !
分数维:
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[doi=true]{biblatex}
\RequirePackage{filecontents}
\begin{filecontents}{ref.bib}
@article{Williamson.1968,
author = {Williamson, Oliver E.},
year = {1968},
title = {Economies as an Antitrust Defense: The Welfare Tradeoffs},
doi={12.803/bla{\_}327}
}
\end{filecontents}
\addbibresource{ref.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案1
声称支持的软件biblatex
应该导出不加改变的 DOI 和 URL,并且不进行 LaTeX 转义。(对于支持专用doi
或url
字段的大多数 BibTeX 样式来说也是如此。永远不需要转义像或这样的_
字段中的特殊字符:样式应该使用可以接受的命令来处理这些事情。)向 Mendeley 支持部门投诉。url
doi
\url
_
如果你必须坚持使用 Mendeley,而他们拒绝修复此问题,你可以使用 Biber 源图来修复损坏的条目
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[doi=true]{biblatex}
\DeclareSourcemap{
\maps{
\map{
\step[fieldsource=doi,
match=\regexp{\{\\_\}},
replace=\regexp{_}]
}
}
}
\begin{filecontents}{\jobname.bib}
@article{Williamson.1968,
author = {Williamson, Oliver E.},
year = {1968},
title = {Economies as an Antitrust Defense: The Welfare Tradeoffs},
doi = {12.803/bla{\_}327}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
对于 Mendeley 导出器损坏的所有字符,您都需要类似的一行。
答案2
我最近才发现这个问题,不幸的是,由于软件包不兼容,我无法使用这里介绍的解决方案。我使用的是带有 cite 的软件包backref
,但它不适用于biblatex
。最后,我可以通过在 overleaf 中使用 latexmkrc 来解决我的问题。我的问题是包含有效内容的标题{$\mathbb{ab}$}
变得混乱。这是我的 latexmkrc 代码,希望对其他人有用:
system("sed -i 's/{\\\\textbackslash}/\\\\/g' ./references.bib");
system("sed -i 's/{\\\\}}/}/g' ./references.bib");
system("sed -i 's/{\\\\{}/{/g' ./references.bib");
system("sed -i 's/{\\\\^}/^/g' ./references.bib");
system("sed -i 's/{\\\\^{}}/^/g' ./references.bib");
system(q"sed -i 's/{\\\$}/$/g' ./references.bib");