為什麼在帶有列表的 MatLab 程式碼中字串解釋錯誤

為什麼在帶有列表的 MatLab 程式碼中字串解釋錯誤

我試圖使用清單包將 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 程式碼的特殊分隔符號類型,定義為

[...] Ada 和 Matlab 以及可能的其他語言的特殊類型,其中字串分隔符號也用於其他目的。它等效於d,只不過字串不是在字母、右括號、右方括號或某些其他字元之後開始。

如果您不想要這種特殊行為,請使用morestring=[d]".

您也可以定義一種基於 Matlab 的新語言,並新增新的字串類型:

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

在清單中使用該新語言可以得到所需的輸出:

在此輸入影像描述

相關內容