我发现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
正常工作。
这不是理想的选择,因为必须将这些额外的字符添加到代码中,但是直到添加对未加引号的字符串的自动处理功能之前,我发现这是唯一的方法。