这个问题显然一次又一次地出现,但是已经有一段时间我找不到解决方案了,所以我想再问一次。
考虑一下:
\documentclass[fontsize=11pt,pagesize=auto,hidelinks,cleardoublepage=empty]{scrbook}
\usepackage{blindtext}
\usepackage{listings}
\usepackage{xcolor}
\definecolor{inline code}{RGB}{194,61,53}
\newcommand*{\code}{\lstinline[basicstyle=\fontsize{9}{11}\ttfamily\color{inline code},keywordstyle=\color{inline code},stringstyle=\color{inline code}]}
\begin{document}
\pagecolor{black!30!white}
\blindtext
Here is a sample paragraph that is just the right length. And here is some \code{ExampleCodeThatIsLong} within that paragraph.
\begin{sloppypar}
Here is a sample paragraph that is just the right length. And here is some \code{ExampleCodeThatIsLong} within that paragraph.
\end{sloppypar}
\blindtext
\end{document}
渲染如下:
显然我的问题是ExampleCodeThatIsLong
第二段中的悬垂部分。第三段通过使用以下方法“解决”了这个问题sloppypar
,但它要求我换行。鉴于我的书有很多的\inlinecode
,我需要有效地包装每一个段落sloppypar
!我甚至还没有检查过脚注内的内联代码会发生什么情况,例如……
我知道我还可以添加,draft
我的documentclass
选项来直观地了解问题:
但这并不能省去我到处添加的麻烦sloppypar
。
我怎样才能获得内联代码总是表现得像在 下一样吗sloppypar
? 这个问题有优雅的解决方案吗?
答案1
仍然不太清楚您想要什么输出。如果您希望大型不可分割的文本越过行线,但整个段落仍然对齐,则需要更改段落设置,以便sloppypar
针对小区域或仅放置
\sloppy
在文档序言中将其设为默认设置。
或者,如果你只想对代码周围的空白进行局部更改,你可以使用
\newcommand*{\code}{\hspace*{0pt plus .2\linewidth}\linebreak[0]\hspace*{0pt plus -.2\linewidth}%
\lstinline[basicstyle=\fontsize{9}{11}\ttfamily\color{inline code},keywordstyle=\color{inline code},stringstyle=\color{inline code}]}
这样可以让行距缩短 20% 的行宽。您可以减少行距以.2\linewidth
减少短行(您设置的行距越短,您就越能鼓励行上任何其他单词间空间拉伸以进行补偿)如果您想确保行距不会过满,您可以允许它1\linewidth
无限拉伸,例如,1fill
但这会停止任何单词间空间拉伸并将所有“额外”空间移至行尾。