我有一个 \texttt 的覆盖,以防止换行并添加一个框,但它仍然会破坏单词

我有一个 \texttt 的覆盖,以防止换行并添加一个框,但它仍然会破坏单词

我有以下覆盖:

% override the inline code styling to show a gray highlight box
\let\oldTexttt\texttt
\renewcommand{\texttt}[1]{%
  \begin{RaggedRight}%
  \sethlcolor{codegray}%
  \ttfamily\hl{#1}%
  \end{RaggedRight}%
}

但是我仍然有一些应该在灰色框中的单词被拆分到行之间。这些单词是类似 selectpicture 和 listpictures 的命令。在一种情况下,第一个单词是 split sel,位于一行的末尾,ectpicture 位于下一行的开头。在另一种情况下,第二个单词是 split listpic,位于一行的末尾,tures 位于下一行的开头。我需要让这些单词不被拆分。

注意:我并不是想阻止整个文档中的所有单词换行/换行,而只是阻止其中的单词换行/换行\texttt

答案1

我明白了。我需要\mbox在那里放一个。

问题解决了。

答案2

您的\begin{RaggedRight}...\end{RaggedRight}什么都不做,除了限制 的范围\ttfamily,因为\end{RaggedRight}只是结束了 生效的范围\RaggedRight。无论有没有 ,段落的形成方式都完全相同\RaggedRight

我不建议重新定义\texttt。如果你仍然想这样做,那么请使用正确的方法:

\documentclass{article}
\usepackage{soul,ragged2e,xcolor,letltxmacro}

\colorlet{codegray}{black!30}

\LetLtxMacro\oldTexttt\texttt % useless?
\let\texttt\relax

\DeclareRobustCommand{\texttt}[1]{%
  \mbox{\sethlcolor{codegray}\ttfamily\hl{#1}}%
}

\begin{document}

We have some nonsense text in order
to show what happens \texttt{abc def ghi jkl} and if this
splits across lines we're happy.

\end{document}

添加\mbox使得参数中的项目之间无法换行。

然而,那是不是\texttt预期要做什么。出于这个和其他原因,不同的宏会更好,主要是新名称会添加语义到你的打字稿。

\documentclass{article}
\usepackage{soul,ragged2e,xcolor,letltxmacro}

\colorlet{codegray}{black!30}

\DeclareRobustCommand{\code}[1]{%
  \mbox{\sethlcolor{codegray}\ttfamily\hl{#1}}%
}

\begin{document}

We have some nonsense text in order
to show what happens \code{abc def ghi jkl} and if this
splits across lines we're happy.

\end{document}

相关内容