正确且全局地包装 lstinline

正确且全局地包装 lstinline

这个问题显然一次又一次地出现,但是已经有一段时间我找不到解决方案了,所以我想再问一次。

考虑一下:

\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但这会停止任何单词间空间拉伸并将所有“额外”空间移至行尾。

相关内容