处理 lstinline 中过满的水平盒子

处理 lstinline 中过满的水平盒子

我有以下命令:

\newcommand*{\code}{\lstinline[basicstyle=\relscale{0.9}\ttfamily\color{inline code},keywordstyle=\color{inline code},stringstyle=\color{inline code},keepspaces=true]}

我在整本书中广泛使用了这种方法,有时内联代码相当长(例如完全限定的类名)。这会导致水平框溢出问题,这是可以理解的,因为 TeX 无法对代码进行连字符处理。

一种可行的方法是将长代码分解,因此不要这样做:

\code{AReallyLongClassName}

我可以做这个:

\code{A}\-\code{Really}\-\code{Long}\-\code{Class}\-\code{Name}

虽然这种方法可行,但要仔细检查所有\code用法并进行转换确实非常费力。此外,这也使源代码更难阅读。

我已经阅读了有关此事的一些现有问题,并找到了一些建议:

\usepackage[htt]{hyphenat} % enable line breaks

然而,这似乎只支持texttt,我没有使用(并且对它不够熟悉,不知道我是否应该使用它,但我读到的内容表明不要使用它)。

我也尝试过这个:

\hyphenation{A-Really-Long-Class-Name}

但这似乎也被忽略了lstinline

以下是 MWE:

% !TEX program = xelatex

\documentclass[fontsize=11pt,pagesize=auto,hidelinks,cleardoublepage=empty,parskip]{book}

\usepackage{listings}
\usepackage{xcolor}
\usepackage{relsize}

\usepackage[paperheight=10in,paperwidth=6in,margin=2cm,heightrounded,bindingoffset=5mm,showframe=false]{geometry}

\sloppy

\newcommand*{\code}{\lstinline[basicstyle=\relscale{0.9}\ttfamily\color{red},keywordstyle=\color{red},stringstyle=\color{red},keepspaces=true]}

\begin{document}

Here is a paragraph with some inline code. \code{ReallyLongName.First.Second.Third.Fourth.Fifth}.

Here is a paragraph with some inline code. \code{Really}\-\code{Long}\-\code{Name}\-\code{.First}\-\code{.Second}\-\code{.Third}\-\code{.Fourth}\-\code{.Fifth}.
\end{document}

输出:

在此处输入图片描述 这里有更好的解决方案吗?

答案1

您可以将breaklines选项添加到\lstinline。这将允许中断,例如在.,这对于完全限定的类名来说应该足够了:

% !TEX program = xelatex

\documentclass[fontsize=11pt,pagesize=auto,hidelinks,cleardoublepage=empty,parskip]{book}

\usepackage{listings}
\usepackage{xcolor}
\usepackage{relsize}

\usepackage[paperheight=10in,paperwidth=6in,margin=2cm,heightrounded,bindingoffset=5mm,showframe=false]{geometry}

\sloppy

\newcommand*{\code}{\lstinline[basicstyle=\relscale{0.9}\ttfamily\color{red},keywordstyle=\color{red},stringstyle=\color{red},keepspaces=true,breaklines]}

\begin{document}

Here is a paragraph with some inline code. \code{ReallyLongName.First.Second.Third.Fourth.Fifth}.
\end{document}

输出

相关内容