¿Por qué las cadenas se interpretan mal en el código MatLab con listados?

¿Por qué las cadenas se interpretan mal en el código MatLab con listados?

Estoy intentando incluir código MatLab en mi documento usando el paquete de listados, pero parece que las cadenas no se interpretan correctamente.

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}

Resultado:

Resultado del MWE

¿Es posible agregar "a la misma lista que 'está?

Respuesta1

La definición del lenguaje Matlab solo se define 'como delimitador de cadena de forma predeterminada. Pero también puedes crear "uno agregando la siguiente línea a las opciones del listado:

morestring=[m]"

mes un tipo de delimitador especial para el código Matlab definido como

[...] un tipo especial para Ada y Matlab y posiblemente otros lenguajes donde los delimitadores de cadena también se usan para otros propósitos. Es equivalente a d, excepto que una cadena no comienza después de una letra, un paréntesis derecho, un corchete derecho u otros caracteres.

Si no desea ese comportamiento especial, utilice morestring=[d]".

También puede definir un nuevo lenguaje basado en Matlab con el nuevo tipo de cadena agregado:

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

Usar ese nuevo idioma en su listado proporciona el resultado deseado:

ingrese la descripción de la imagen aquí

información relacionada