我有以下覆盖:
% 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}