Unescape 命令参数

Unescape 命令参数

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

在此处输入图片描述

相关内容