在 Matlab 中有两种使用方法end
:
- 结束
if
s、while
s 等等 - 引用数组或向量中的最后一项(例如:
v(end)
或v(end-1)
)。
我想listings
在我的文档中包含一些 matlab 代码,然后我遇到了这答案解释了如何做到这一点(包括非常好的格式)。问题是,该行emph=[1]{for,end,break},emphstyle=[1]\color{blue},
对所有end
s 都一视同仁,甚至在它们不应该突出显示时也突出显示(上面的情况 2)。在这个非常基本的例子中:
我的代码实际上会更复杂一些,但只要给出有效的解决方案,我就应该能够适应它。非常感谢您的帮助!
这是平均能量损失上面的输出:
\documentclass{scrreprt}
\usepackage{color}
\usepackage{listings}
\usepackage{filecontents}
\begin{filecontents*}{foo.m}
for i=1:3
x(i)=i;
end % this should be blue
y = x(end); % this shouldn't
\end{filecontents*}
\definecolor{mygreen}{RGB}{28,172,0}
\definecolor{mylilas}{RGB}{170,55,241}
\lstset{language=Matlab,%
%basicstyle=\color{red},
breaklines=true,%
morekeywords={matlab2tikz},
keywordstyle=\color{black},%
morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
identifierstyle=\color{black},%
stringstyle=\color{mylilas},
commentstyle=\color{mygreen},%
showstringspaces=false,%without this there will be a symbol in the places where there is a space
numbers=left,%
numberstyle={\tiny \color{black}},% size of the numbers
numbersep=9pt, % this defines how far the numbers are from the text
emph=[2]{(end)},emphstyle=[2]\color{black}, %doesn't work...
emph=[1]{for,end,break},emphstyle=[1]\color{blue}, %some words to emphasise
%emph=[2]{word1,word2}, emphstyle=[2]{style},
}
\begin{document}
\lstinputlisting{foo.m}
\end{document}
答案1
使用matlab-prettifier
包。
\documentclass{scrreprt}
%\usepackage{listings}
\usepackage[numbered,framed]{matlab-prettifier}
\usepackage{filecontents}
\begin{filecontents*}{foo.m}
for i=1:3
x(i)=i;
end % this should be blue
y = x(end); % this shouldn't
\end{filecontents*}
\lstset{
style = Matlab-editor,
basicstyle = \mlttfamily,
escapechar = ",
mlshowsectionrules = true,
}
\begin{document}
\lstinputlisting{foo.m}
\end{document}