Comentários Multiline Matlab em listagens de pacotes

Comentários Multiline Matlab em listagens de pacotes

Estou usando as listagens de pacotes para incluir algum código Matlab em meu relatório. Funciona bem com comentários começando por, %mas não reconhece comentários de múltiplas linhas %{ ... %}:

\usepackage{listings}
\lstset{language=Matlab}
...
\begin{lstlisting}
% normal comment
MATLAB code
%{
This is
a multiline
comment
%}
function [x,y] = test(x)
\end{lstlisting}

insira a descrição da imagem aqui

em vez de

insira a descrição da imagem aqui

em Matlab.

Como posso mudar \lstsetpara que funcione?

Responder1

Minha recomendação seria usar o pacotematlab-prettifier, que é baseado, listingsmas fornece recursos aprimorados para o código MATLAB acima e além daqueles fornecidos pela listings' Matlabdefinição de linguagem (incluindo suporte para comentários em bloco):

\documentclass{article}
\usepackage{matlab-prettifier}
\lstset{style=Matlab-editor}

\begin{document}
\begin{lstlisting}
% normal comment
MATLAB code
%{
This is
a multiline
comment
%}
function [x,y] = test(x)
\end{lstlisting}
\end{document}

insira a descrição da imagem aqui

Se, por algum motivo, você precisar usar listingsa implementação existente da Matlablinguagem, poderá adicionar suporte para comentários em bloco definindo a morecommentchave do pacote:

morecomment=[s]{\%\{}{\%\}}

Aqui [s]significa que estamos procurando dois delimitadores, o primeiro para abrir um comentário em bloco e o segundo para fechá-lo. Os seguintes grupos de chaves contêm os delimitadores de abertura e fechamento para um comentário de bloco, respectivamente. Observe que tanto o sinal de porcentagem quanto as chaves de abertura/fechamento individuais devem ter barras invertidas ao definir os delimitadores de comentários.

\documentclass{article}
\usepackage{listings}
\lstset{
  language=Matlab,
  basicstyle=\ttfamily,
  morecomment=[s]{\%\{}{\%\}},
}

\begin{document}
\begin{lstlisting}
% normal comment
MATLAB code
%{
This is
a multiline
comment
%}
function [x,y] = test(x)
\end{lstlisting}
\end{document}

insira a descrição da imagem aqui

informação relacionada