我正在使用 docutils 生成 LaTeX 文件,并在 rst 文件中使用自定义角色来使用特定于 latex 的命令。
我的问题是,docutils 会自动转义自定义命令参数中的下划线。例如
:citep:`test_2014`
变成(扩展内部宏后)
\citep{test\_2014}
这会产生错误。
我想避免修补 docutils。有没有办法在 latex 中“取消转义”下划线?此外,有没有通用的方法可以对其他转义字符执行此操作?
答案1
您可以修补\@citex
(以组的形式执行)以说\def\_{_}
。这样,的其他用法\_
就不会受到影响。这样做\AtBeginDocument
是必要的,因为它在那里natbib
重新定义了\@citex
。
\begin{filecontents*}{\jobname.bib}
@article{test_2014,
author={A. Uthor},
title={Title},
journal={Journal},
year={2014},
}
\end{filecontents*}
\documentclass{article}
\usepackage{etoolbox,natbib}
\makeatletter
\AtBeginDocument{%
\pretocmd{\@citex}{\def\_{_}}{}{}%
}
\makeatother
\begin{document}
\citep{test\_2014}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}