列出颜色上下文敏感关键字(Matlab)

列出颜色上下文敏感关键字(Matlab)

在 Matlab 中有两种使用方法end

  1. 结束ifs、whiles 等等
  2. 引用数组或向量中的最后一项(例如:v(end)v(end-1))。

我想listings在我的文档中包含一些 matlab 代码,然后我遇到了答案解释了如何做到这一点(包括非常好的格式)。问题是,该行emph=[1]{for,end,break},emphstyle=[1]\color{blue},对所有ends 都一视同仁,甚至在它们不应该突出显示时也突出显示(上面的情况 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}

相关内容