通过使用,\lstinline{mysourcecode}
我将一些代码放入我的文档中。
如果可能的话,我希望避免将此代码拆分为新行。因此,如果代码行本身比完整的文本行短,那么LaTeX
如果代码位于文本行的中间某处,我希望不进行换行,但\lstline
如果不这样做会导致代码分成两行,则在之前进行换行。
怎么做?
答案1
以下 MWE\lstInline[<options>]{<code snippet>}
作为补充,\lstinline
测试内联代码是否适合行的剩余部分,否则会发出换行符。
\documentclass{article}
\usepackage{linegoal,listings}
\newsavebox{\mylisting}
\makeatletter
\newcommand{\lstInline}[2][,]{%
\begingroup%
\lstset{#1}% Set any keys locally
\begin{lrbox}{\mylisting}\lstinline!#2!\end{lrbox}% Store listing in \mylisting
\setlength{\@tempdima}{\linegoal}% Space left on line.
\ifdim\wd\mylisting>\@tempdima\hfill\\\fi% Insert line break
\lstinline!#2!% Reset listing
\endgroup%
}
\makeatother
\setlength{\parindent}{0pt}% Just for this example
\begin{document}
\lstset{basicstyle=\ttfamily,breaklines=true}
Here is some text and \lstinline!some code segment! as well. \par
Here is some text and \lstInline{some code segment} as well. \par
Here is some text, then a little more text,
and finally there is also \lstinline!some code segment! as well. \par
Here is some text, then a little more text,
and finally there is also \lstInline{some code segment} as well. \par
\end{document}
换线条件反射背后的驱动力来自于linegoal
包裹依赖于zref
的savepos
模块。首先在内的\lstinline
框内设置,以确定其宽度。如果它超出(行上剩余的可用空间),则在表单中发出换行符,之后再次调用。\mylisting
\lstInline
\linegoal
\hfill\\
\lstinline
重置\lstinline
(而不仅仅是使用盒装值\usebox{\mylisting}
)允许代码段环绕多行,并且如果需要,还可以在常规文本中适当拉伸/收缩。
代码段起始位置的任何变化都需要重新编译才能正常工作 - 这是使用提供的系统\label
时的要求。\ref
linegoal
请注意,\lstInline
使用\lstinline!...!
with!
作为字符分隔符。因此,!
在内联列表中实际使用时会出现问题。如果这是个问题,只需在定义中使用替代字符即可。