列表换行

列表换行

如何才能让其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=truepostbreak=\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{},以便其符号在复制和粘贴时不存在。

相关内容