为什么 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]"
}

在列表中使用该新语言可获得所需的输出:

在此处输入图片描述

相关内容