为什么这个句法元素没有被 matlab-prettifier 正确突出显示?

为什么这个句法元素没有被 matlab-prettifier 正确突出显示?

我发现matlab-prettifier与原始文件相比,它并没有突出显示所有语法。例如,这是我尝试从 MATLAB 包含到我的文档中的文件的一部分的快照:

在此处输入图片描述

如您所见,“syms”变量的显示方式与 MATLAB 中的文本命令类似。但是,从下面的代码来看,此 MATLAB 命令的彩色排版方式与原始命令不同。如何才能使 MATLAB 中的此“sys”语法在我的 LaTeX 文档中正确显示?

这是我的代码:

\documentclass{book}
\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{filecontents}
\begin{filecontents}{mat1.m}
%% Variables to solve
syms r2s r3s th1 th2;

% arm1
x1 = [0 0]; y1 = [0 1];
x2 = [0 1]; y2 = [1 1];
x3 = [1 1]; y3 = [1 2];

% Size figure and draw arms
figure('position', [800, 300, 600, 550]);
hold on
plot(xcirc, ycirc,'m','linewidth', 1);
\end{filecontents}

\renewcommand{\lstlistingname}{\textbf{\textcolor{blue}{Matlab Algorithm}}}
\renewcommand{\lstlistlistingname}{List of \lstlistingname s}

\usepackage[numbered,framed]{matlab-prettifier}

\begin{document}

\lstinputlisting[
backgroundcolor=\color{blue!05},
style=Matlab-editor,
basicstyle=\mlttfamily\small,
caption={Draw a simple Fig.},
label={mat1}
]{mat1.m}

\end{document} 

答案1

这个问题在matlab-prettifier文档;此处的字符串是“未加引号的字符串”。这些字符串不仅会出现在函数中syms,还会出现在任何未使用括号分隔其参数的函数使用中。在这些情况下,MATLAB 会将行的其余部分(不包括任何尾随分号)视为函数的字符串参数序列(以空格分隔)。(即,legend a b相当于legend('a','b').)

开发人员matlab-prettifier在待办事项列表中提到,他计划在未来的版本中添加未加引号的字符串的自动突出显示功能。

不幸的是,目前唯一的解决方案是将非打印分隔符添加到列表中,并matlab-prettifier使用键来告知它们mlunquotedstringdelim。您应该选择一个在代码中其他地方未使用的字符——这里我选择了þ

\documentclass{book}
\usepackage{listings}
\usepackage[T1]{fontenc}

\usepackage{matlab-prettifier}

\begin{document}

\begin{lstlisting}[
  style=Matlab-editor,
  basicstyle=\mlttfamily,
  mlunquotedstringdelim={þ}{þ},
]
%% Variables to solve
syms þr2s r3s th1 th2þ;
\end{lstlisting}

\end{document}

在此处输入图片描述

我精简了您的代码,以简洁地展示问题的关键。另请注意,您必须执行\usepackage[T1]{fontenc}才能\mlttfamily正常工作。

这不是理想的选择,因为必须将这些额外的字符添加到代码中,但是直到添加对未加引号的字符串的自动处理功能之前,我发现这是唯一的方法。

相关内容