![Многострочные комментарии Matlab в листингах пакетов](https://rvso.com/image/335504/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B8%20Matlab%20%D0%B2%20%D0%BB%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0%D1%85%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2.png)
Я использую списки пакетов, чтобы включить в свой отчет код 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
, который основан на определении языка listings
MATLAB, но обеспечивает расширенные возможности для кода 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}