我正在记录一些 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}
下标在数学模式下仍然有效。