将 \texttt{} 与章节和目录结合起来 - 不正确的字母常数

将 \texttt{} 与章节和目录结合起来 - 不正确的字母常数

正在努力使代码的换行功能正常工作,并找到了一个对我有用的解决方案 - 直到我尝试在代码中添加目录。问题似乎在于在(子)节标题内使用新的 \texttt{}。有很多错误,并且目录已损坏(在 Overleaf 上,对于 MWE)- 在我的实际项目中,由于同样的错误,它甚至无法编译。

我正在使用 Steven Segletes 解决方案对 \texttt{} 中的特定字符进行换行:文本中的换行符

错误堆栈以两次“不正确的字母常量。”开始,然后继续“缺少插入 $。”,“缺少插入 }。”,“缺少插入 $。”等等。

我正在用 markdown 编写并使用 pandoc 编译为 tex,所以我真的不想有两个版本的 \texttt(即制作 \textttwrap 或 \textttnowrap 或类似版本)。

我的 MWE(它使用 scrarticle,因为我正在使用它,但问题与 article 相同)。

\documentclass{scrarticle}
\usepackage[utf8]{inputenc}

\catcode`_=12 %
\renewcommand{\texttt}[1]{%
  \begingroup
  \ttfamily
  \begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\discretionary{}{}{}}%
  \begingroup\lccode`~=`[\lowercase{\endgroup\def~}{[\discretionary{}{}{}}%
  \begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\discretionary{}{}{}}%
  \begingroup\lccode`~=`_\lowercase{\endgroup\def~}{_\discretionary{}{}{}}%
  \begingroup\lccode`~=`:\lowercase{\endgroup\def~}{:\discretionary{}{}{}}%
  \catcode`/=\active\catcode`[=\active\catcode`.=\active\catcode`_=\active\catcode`:=\active
  \scantokens{#1\noexpand}%
  \endgroup
}
\catcode`_=8 %

\title{subsection-texttt-mwe}
\author{c.angustaylor }
\date{January 2021}

\begin{document}

\maketitle

\tableofcontents

\section{Introduction}

\texttt{this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_this_is_long_but_wraps_properly_}

\subsection{\texttt{this_is_tt_subsection}}

Doesn't work with no escapes for \_, which is fine in texttt{} with the solution otherwise.

% \subsection{\texttt{this\_is\_tt\_subsection}}

% Also doesn't work with escapes for \_

\end{document}

答案1

保护\texttt

\subsection{\protect\texttt{this_is_tt_subsection}}

或者使定义具有普遍的稳健性

\DeclareRobustCommand{\texttt}[1]{%

或使用(这需要新的 LaTeX,在旧版 LaTeX 中添加\usepackage{xparse}):

\RenewDocumentCommand{\texttt}{m}{%

相关内容