我正在尝试制作列表环境制动管线。不幸的是,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}
它看起来是这样的:
我可以请你帮忙吗?
答案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}