Por que as strings são interpretadas incorretamente no código MatLab com listagens

Por que as strings são interpretadas incorretamente no código MatLab com listagens

Estou tentando incluir o código MatLab em meu documento usando o pacote de listagens, mas parece que as strings não são interpretadas corretamente.

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 do MWE

É possível adicionar itens "à mesma lista que 'está?

Responder1

A definição da linguagem Matlab define apenas 'como delimitador de string por padrão. Mas você também pode fazer "um adicionando a seguinte linha às opções da listagem:

morestring=[m]"

mé um tipo de delimitador especial para código Matlab definido como

um tipo especial para Ada e Matlab e possivelmente outras linguagens onde os delimitadores de string também são usados ​​para outros fins. É equivalente a d, exceto que uma string não começa após uma letra, um parêntese direito, um colchete direito ou alguns outros caracteres.

Se você não quiser esse comportamento especial, use morestring=[d]".

Você também pode definir uma nova linguagem baseada em Matlab com o novo tipo de string adicionado:

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

Usar esse novo idioma em sua listagem fornece o resultado desejado:

insira a descrição da imagem aqui

informação relacionada