Почему строки интерпретируются неправильно в коде MatLab с листингами

Почему строки интерпретируются неправильно в коде MatLab с листингами

Я пытаюсь включить код MatLab в свой документ с помощью пакета listings, но, похоже, строки интерпретируются неправильно.

fprintf('ABC %s:\n', mystring);
fprintf("ABC %s:\n", mystring);
\documentclass{article}
\usepackage[english]{babel}     %use english or ngerman
\usepackage[utf8]{inputenc}     %German äöü for input
\usepackage[T1]{fontenc}        %German äöü for pdf
\usepackage{textcomp}           %Additional Symbols e.g. degree
\usepackage{xcolor}
\usepackage{listings}

\definecolor{keyword}{RGB}{0,175,203}      %color
\definecolor{comment}{rgb}{0.06,0.58,0.07} %color
\definecolor{label}{rgb}{0.5,0.5,0.5}      %color

\lstset{                                   %Configure code
  keywordstyle=\bfseries\color{keyword},
  stringstyle=\ttfamily\color{label},
  commentstyle=\color{comment}
}

\begin{document}

\begin{lstlisting}[
    language=MatLab,
    label=lst:broken,
    caption={Broken Syntax Highlighting}
]
fprintf('ABC %s:\n', mystring);
fprintf("ABC %s:\n", mystring);
\end{lstlisting}

\end{document}

Результат:

Результат MWE

Можно ли что-то добавить "в тот же список, что 'и есть?

решение1

Определение языка Matlab определяет только 'как разделитель строк по умолчанию. Но вы также можете сделать "его, добавив следующую строку в параметры листинга:

morestring=[m]"

m— это специальный тип разделителя для кода Matlab, определяемый как

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

Если вам не нужно такое особое поведение, используйте morestring=[d]".

Вы также можете определить новый язык, основанный на Matlab, с добавлением нового типа строки:

\lstdefinelanguage{MyMatlab}{
  language=Matlab,
  morestring=[m]"
}

Использование этого нового языка в вашем листинге дает желаемый результат:

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

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