列表环境中的断线

列表环境中的断线

我正在尝试制作列表环境制动管线。不幸的是,breaklines=true它对我来说不起作用。这是我的代码:

\usepackage{listings}

\begin{document}

\lstset{language=matlab,breaklines=true, extendedchars=true, numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt, basicstyle=\footnotesize, frame=lines, keywordstyle=\bfseries\color{blue}, commentstyle=\color{green!50!black}}

\lstset{emph={classdef, properties, methods},emphstyle={\color{blue}\bfseries}}

\renewcommand{\lstlistingname}{Algorytm}

\begin{lstlisting}[caption=Funkcja \emph{createFoR} klasy \emph{row}., label=func_createFoR, float=ht]
classdef row < handle

properties
rp  %promien rownoleznika
end

methods 
    function [T1 T2] = createFoR(obj,hT,Alpha,Beta,DeltaAlpha,DeltaBeta)
         P1(1,1) = obj.r * cosd(Beta);
         P1(1,2) = obj.r * cosd(90 - Beta);
         P1(1,3) = obj.r * tand(90 - (Alpha + DeltaAlpha));
         P1(2,:) = hT.P(1,:);
         %hT - trojkat z wyzszego wiersza
         P1(3,1) = obj.r * cosd(Beta + DeltaBeta);
         P1(3,2) = obj.r * cosd(90 - (Beta + DeltaBeta));
         P1(3,3) = obj.r * tand(90 - (Alpha + DeltaAlpha)); 
         T1 = triangle(P1);
         P2(1,:) = hT.P(1,:);
         P2(2,:) = hT.P(3,:);
         P2(3,:) = P1(3,:);
         T2 = triangle(P2);
    end
end
\end{lstlisting}

它看起来是这样的:http://i.imgur.com/VjTH3ku.png

我可以请你帮忙吗?

答案1

mwrep\exhyphenpenalty=10000。此设置可防止在显式连字符或项后换行\discretionary。后者使用包listings

\exhyphenpenalty以下补丁将重置列表的设置:

\makeatletter
\lst@AddToHook{Init}{\exhyphenpenalty=50\relax}
\makeatother

完整示例:

\documentclass{mwrep}
\usepackage{xcolor}
\usepackage{listings}

\makeatletter
\lst@AddToHook{Init}{\exhyphenpenalty=50\relax}
\makeatother

\begin{document}

\lstset{language=matlab,breaklines=true, extendedchars=true, numbers=left, numb

\lstset{emph={classdef, properties, methods},emphstyle={\color{blue}\bfseries}}

\renewcommand{\lstlistingname}{Algorytm}

\begin{lstlisting}[caption=Funkcja \emph{createFoR} klasy \emph{row}., label=fu
classdef row < handle

properties
rp  %promien rownoleznika
end

methods
    function [T1 T2] = createFoR(obj,hT,Alpha,Beta,DeltaAlpha,DeltaBeta)
         P1(1,1) = obj.r * cosd(Beta);
         P1(1,2) = obj.r * cosd(90 - Beta);
         P1(1,3) = obj.r * tand(90 - (Alpha + DeltaAlpha));
         P1(2,:) = hT.P(1,:);
         %hT - trojkat z wyzszego wiersza
         P1(3,1) = obj.r * cosd(Beta + DeltaBeta);
         P1(3,2) = obj.r * cosd(90 - (Beta + DeltaBeta));
         P1(3,3) = obj.r * tand(90 - (Alpha + DeltaAlpha));
         T1 = triangle(P1);
         P2(1,:) = hT.P(1,:);
         P2(2,:) = hT.P(3,:);
         P2(3,:) = P1(3,:);
         T2 = triangle(P2);
    end
end
\end{lstlisting}
\end{document}

结果


如果可能的话,我会使用columns=flexible,它会稍微削弱垂直对齐,因此这取决于源代码格式(如果这是一个选项)。但好处是行宽更小,因为包listings不需要为字体的较宽字符保留空间。它减少了换行符,并且列表的单词以更自然的方式设置,并且更易于阅读。

为了进行比较,下图是使用以下设置生成的:

\lstset{columns=flexible}

列=灵活结果

相关内容