我有以下命令:
\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}