![¿Por qué las cadenas se interpretan mal en el código MatLab con listados?](https://rvso.com/image/399825/%C2%BFPor%20qu%C3%A9%20las%20cadenas%20se%20interpretan%20mal%20en%20el%20c%C3%B3digo%20MatLab%20con%20listados%3F.png)
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:
¿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]"
m
es 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: