Comentarios multilínea de Matlab en listados de paquetes

Comentarios multilínea de Matlab en listados de paquetes

Estoy usando los listados de paquetes para incluir código de Matlab en mi informe. Funciona bien con comentarios que comienzan por %pero no reconoce comentarios de varias líneas %{ ... %}:

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

da

ingrese la descripción de la imagen aquí

en lugar de

ingrese la descripción de la imagen aquí

en Matlab.

¿Cómo puedo cambiar \lstsetpara que funcione?

Respuesta1

Mi recomendación sería utilizar el paquete.matlab-prettifier, que se basa en, listingspero proporciona características mejoradas para el código MATLAB, más allá de las proporcionadas por la definición listingsdel Matlablenguaje (incluida la compatibilidad con comentarios de bloque):

\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}

ingrese la descripción de la imagen aquí

Si, por alguna razón, debe usarlo listingscon su implementación existente del Matlablenguaje, puede agregar soporte para bloquear comentarios configurando la morecommentclave del paquete:

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

Aquí [s]significa que buscamos dos delimitadores, el primero para abrir un comentario de bloque y el segundo para cerrarlo. Los siguientes grupos de llaves contienen los delimitadores de apertura y cierre de un comentario de bloque, respectivamente. Tenga en cuenta que tanto el signo de porcentaje como las llaves individuales de apertura/cierre deben ir acompañadas de barras invertidas al definir los delimitadores de comentarios.

\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}

ingrese la descripción de la imagen aquí

información relacionada