![Por que as strings são interpretadas incorretamente no código MatLab com listagens](https://rvso.com/image/399825/Por%20que%20as%20strings%20s%C3%A3o%20interpretadas%20incorretamente%20no%20c%C3%B3digo%20MatLab%20com%20listagens.png)
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:
É 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: