我正在使用带有列表的breaklines
andprebreak
选项,但我发现预断点符号没有垂直对齐,这在视觉上不太令人满意。我更希望它们都位于列表的最右侧。
这是示例代码。
\documentclass{standalone}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[breaklines,breakatwhitespace,prebreak=!,basicstyle=\ttfamily]
This is a long line This is a long line This is a long line This is a long line This is a long line
This is another long line This is another long line This is another long line This is another long line
\end{lstlisting}
\end{document}
得出的结果是:
而我想要的是类似
答案1
以下是一个或多或少有点丑陋的 hack。你可以将 prebreak 符号放在边距内,而不是放在当前行中。边距和文本主体之间的距离由 给出marginparsep
。因此,你可以简单地调整它。该示例需要两个编译步骤。
\documentclass{article}
\usepackage{listings}
\usepackage{marginnote}
\begin{document}
\begin{lstlisting}[breaklines,breakatwhitespace,prebreak={\def\marginnotevadjust{-\baselineskip}\marginnote{\llap{!\hspace*{\marginparsep}}}},basicstyle=\ttfamily]
This is a long line This is a long line This is a long line This is a long line This is a long line
This is another long line This is another long line This is another long line This is another long line
\end{lstlisting}
\end{document}
答案2
因为我有同样的问题,所以偶然发现了这个帖子。虽然这个帖子很旧,但我还是想分享一下:我偶然发现了以下解决方案,它对我来说非常完美:
\documentclass{article}
\usepackage{inconsolata}
\usepackage{listings}
\usepackage{MnSymbol}
\lstset{
basicstyle=\ttfamily,
breaklines=true,
prebreak={\mbox{\quad$\rhookswarrow$}},
numbers=right,
numberstyle={\ttfamily\scriptsize},
}
\begin{document}
\begin{lstlisting}
RewriteRule ^/wms/(.+)$ /cgi-bin/qgis_mapserv.fcgi?map=/srv/www/assip/data/mapdb/$1.qgs [QSA,PT]
RewriteRule ^/maps/([^\.]+)$ /qgis-web-client/site/qgiswebclient.html [PT]
RewriteRule ^/maps/(.*) /qgis-web-client/site/$1 [PT]
\end{lstlisting}
\end{document}
这是我从正在处理的文档中截取的一个例子:
我使用的符号来自\usepackage{MnSymbol}
。我不确定为什么这样做有效,但我猜想这会\quad
同时强制提前中断并将中断字符“推”到最右边。至少它看起来像是右对齐的。