リストを含む MatLab コードで文字列が間違って解釈されるのはなぜですか

リストを含む MatLab コードで文字列が間違って解釈されるのはなぜですか

listings パッケージを使用してドキュメントに MatLab コードを含めようとしていますが、文字列が正しく解釈されないようです。

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コードの特別な区切り文字タイプです。

d[...] Ada と Matlab、および文字列区切り文字が他の目的にも使用される可能性のある他の言語用の特別な型。文字列が文字、右括弧、右角括弧、またはその他の文字の後ろから始まらない点を除いて、と同じです。

特別な動作が必要ない場合は、 を使用しますmorestring=[d]"

新しい文字列型を追加した Matlab に基づく新しい言語を定義することもできます。

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

リストでその新しい言語を使用すると、目的の出力が得られます。

ここに画像の説明を入力してください

関連情報