Многострочные комментарии Matlab в листингах пакетов

Многострочные комментарии Matlab в листингах пакетов

Я использую списки пакетов, чтобы включить в свой отчет код Matlab. Он хорошо работает с комментариями, начинающимися с , %но не распознает многострочные комментарии %{ ... %}:

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

дает

введите описание изображения здесь

вместо

введите описание изображения здесь

в Матлабе.

Что мне нужно изменить \lstset, чтобы это заработало?

решение1

Я бы рекомендовал использовать пакетmatlab-prettifier, который основан на определении языка listingsMATLAB, но обеспечивает расширенные возможности для кода MATLAB сверх тех, которые предусмотрены в определении listingsязыка Matlab(включая поддержку блочных комментариев):

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

введите описание изображения здесь

Если по какой-то причине вам необходимо использовать listingsсуществующую реализацию языка Matlab, вы можете добавить поддержку блочных комментариев, установив ключ пакета morecomment:

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

Здесь [s]означает, что мы ищем два разделителя, первый для открытия блочного комментария, а второй для его закрытия. Следующие группы фигурных скобок содержат открывающие и закрывающие разделители для блочного комментария соответственно. Обратите внимание, что и знак процента, и отдельные открывающие/закрывающие фигурные скобки должны быть экранированы обратной косой чертой при определении разделителей комментариев.

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

введите описание изображения здесь

Связанный контент