在 \label 中添加下划线

在 \label 中添加下划线

我尝试使用pdflatex来输入一些在 中有下划线的文件\label。例如 和\label{abc_xyz},但一直没有成功。我不断收到以下错误:

! Missing \endcsname inserted.
<to be read again>
                   \protect

梅威瑟:

\documentclass[twoside]{article}
\def\itt{\tt #1}
\def\litt#1{\tt #1\label{#1}}
\begin{document}
\itt{pqr_mno}
\litt{abc_xyz}
\litt{xyz_abc}
\end{document}

我做了几次更改,但都失败了。如能得到任何帮助,我将不胜感激

答案1

\label通常,如果在或内部使用下划线及其标准 catcode“下标”(8),则不会引起问题\ref

\documentclass{article}
\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

包的简写babel也不是问题,因为babel修补了\label/\ref系统以添加对简写的支持。

活动下划线

可能你正在使用一个使下划线活跃的包。然后它变得更加复杂。一种解决方法是\string使活动下划线表现为正常字符:

\label{sec\string_hello}
\ref{sec\string_hello}

标签名称也会写入.aux文件中,并在文档末尾再次读取。这里应该恢复 catcode:

\usepackage{atveryend}
\AfterLastShipout{\catcode`\_=12\relax}

如果未知包在之前使下划线的 catcode 处于活动状态,则在序言末尾\begin{document}读取文件时它应该处于非活动状态。.aux

\ifnum\catcode`\_=\active
  \catcode`\_=12\relax
  \AtBeginDocument{\catcode`\_=\active}%
\fi

完整示例:

\documentclass{article}

\catcode`\_=\active
\def_{\textunderscore}

\usepackage{atveryend}
\AfterLastShipout{\catcode`\_=12\relax}
\ifnum\catcode`\_=\active
  \catcode`\_=12\relax
  \AtBeginDocument{\catcode`\_=\active}%
\fi
\begin{document}
\section{Hello World}
\label{sec\string_hello}
See section \ref{sec\string_hello}.
\end{document}

包裹underscore

根据激活下划线的包、激活范围和下划线的定义,可能会有更舒适的方式。例如,包underscore激活下划线,这会破坏引用系统。但包支持babel。下划线表现为简写,如果加载了 babel,则受支持:

\documentclass{article}

\usepackage[english]{babel}
\usepackage{underscore}

\begin{document}
\section{Hello World}
\label{sec_hello}
See section \ref{sec_hello}.
\end{document}

相关内容