如何定义一个包装文本和链接以包含下划线的宏?

如何定义一个包装文本和链接以包含下划线的宏?

我正在记录一些 C++ 代码。每个 C++ 函数在我的文档中都有自己的部分,我试图给每个部分贴上标签,并链接每个函数的提及。

我目前使用的宏是

\usepackage{hyperref}

\newcommand{\cppsection}[1]{\section{#1}\label{#1}}
\newcommand{\cppfcn}[1]{\hyperref[#1]{\texttt{#1}}}

大部分情况下都有效……

...除非 C++ 函数有下划线。例如,\cppsection{my_fcn}不起作用,因为它抱怨部分名称的下划线,并且\cppsection{my\_fcn}不起作用,因为它抱怨标签定义中的反斜杠。

对于宏来说,这个问题同样存在\cppfcn

所以我的问题是:有没有办法定义我的宏来解析文本的下划线标签?

答案1

您可以\detokenize输出:

在此处输入图片描述

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{hyperref}

\newcommand{\cppsection}[1]{\section{\protect\detokenize{#1}}\label{#1}}
\newcommand{\cppfcn}[1]{\hyperref[#1]{\texttt{\detokenize{#1}}}}

\begin{document}

\tableofcontents

\cppsection{function} See \cppfcn{procedure}.

\cppsection{procedure} See \cppfcn{fnc_proc}.

\cppsection{fnc_proc} See \cppfcn{function}.

\end{document}

答案2

可能是这个回答

并尝试:

\documentclass{book}
\usepackage{fontspec}

\catcode`_=12
\newcommand\Test[1]{%
  \section{#1}%
}
\begin{document}

\Test{test_test}
Text_text
\end{document}

答案3

% optional, not necessary:  \usepackage[T1]{fontenc}
%
\usepackage[english]{babel}% or your language
\usepackage{underscore}
\usepackage{hyperref}
. . . 
\cppsection{my_fcn}

下标在数学模式下仍然有效。

相关内容