如何才能让其lstlisting
换行呢?
我对以下块有疑问:
\begin{lstlisting}[language=java]
public class MeasureStationControllerV0Test {
MeasureStationControllerV0 controller;
MeasureStation ms = new MeasureStation();
MeasureStationConfiguration config = new MeasureStationConfiguration();
DataServer dataserver = new DataServer();
PDF 输出中存在溢出:
其他代码片段看起来也很糟糕。
- 那么我必须手动包装它们还是能够
listings
处理它们? - 为什么语法高亮不起作用?
答案1
使用选项breaklines=true
和postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space}
在断线开头放置一个红色箭头来强调断线。
\documentclass{article}
\usepackage{lmodern} % for bold teletype font
\usepackage{amsmath} % for \hookrightarrow
\usepackage{xcolor} % for \textcolor
\usepackage{listings}
\lstset{
basicstyle=\ttfamily,
columns=fullflexible,
frame=single,
breaklines=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
}
\begin{document}
\begin{lstlisting}[language=java]
public class MeasureStationControllerV0Test {
MeasureStationControllerV0 controller;
MeasureStation ms = new MeasureStation();
MeasureStationConfiguration config = new MeasureStationConfiguration();
DataServer dataserver = new DataServer();
\end{lstlisting}
\end{document}
使用此minted
包,您可以获得出色的开箱即用换行和语法高亮功能。只需breaklines
在您的代码片段上指定该选项即可。缺点是您必须使用该--shell-escape
选项处理文档,因为外部程序pygmentize
用于格式化源代码。
\documentclass{article}
\usepackage{lmodern} % for bold teletype font
\usepackage{minted}
\begin{document}
\begin{minted}[breaklines,frame=single]{java}
public class MeasureStationControllerV0Test {
MeasureStationControllerV0 controller;
MeasureStation ms = new MeasureStation();
MeasureStationConfiguration config = new MeasureStationConfiguration();
DataServer dataserver = new DataServer();
\end{minted}
\end{document}
答案2
为了补充@henri-menke的答案,除了选项breaklines=true
和后断点箭头之外,我发现使箭头在文本中不可选择很有用(适用于pdflatex和大多数pdf阅读器)。 这个建议来自另一个使用accsupp
包的答案:有没有办法在 LaTeX 中创建一个“不可选择”的空间?
总结一下解决方案:
\usepackage{accsupp}
% ...
\lstset{
basicstyle=\ttfamily,
columns=fullflexible,
postbreak=\raisebox{0ex}[0ex][0ex]{\BeginAccSupp{ActualText={}}\ensuremath{\color{gray}\hookrightarrow\space}\EndAccSupp{}},
breaklines=true
}
典型的箭头可能是\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{gray}\hookrightarrow\space}}
,但在这种情况下,我们将其放在\BeginAccSupp{ActualText={}}
和之间\EndAccSupp{}
,以便其符号在复制和粘贴时不存在。