列表不会忽略字符串内的注释字符

列表不会忽略字符串内的注释字符

我正在尝试在我的 tex 文档中插入一个 matlab 代码文件,listings但是输出很混乱,因为我%在字符串中使用了fprintf一个注释字符。

在行中fprintf("ess = %.2f%%\n", ess);,一旦%读到,其后的所有内容(直到行的)都被视为注释。

以下是 MWE:

\documentclass[english]{article}
\usepackage{color}
\usepackage{listings}

\definecolor{mycomment}{rgb}{0.63,0.63,0.65}
\definecolor{mygray}{rgb}{0.02,0.68,0.72}
\definecolor{mymauve}{rgb}{0.77,0.64,0.2}
\definecolor{mykw}{rgb}{0, 0.6, 0.87}
\definecolor{myblack}{rgb}{0.22,0.23,0.26}
\definecolor{myred}{rgb}{0.84,0.15,0.33}
\definecolor{mynumber}{rgb}{0.81,0.2,0.75}
\definecolor{row_hl}{rgb}{0.72,0.93,0.99}


\lstset{
    language=Matlab,
    backgroundcolor={\color{white}},
    basicstyle={\footnotesize\ttfamily},
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    commentstyle={\color{mycomment}\small},
    deletekeywords={...},
    escapeinside={"*}{*")},
    extendedchars=true,
    firstnumber=1,
    frame=tb,
    keepspaces=true,
    keywordstyle={\color{mykw}},
    morekeywords={tf,step,stepinfo,damp,factorial,poissrnd,normpdf,normcdf},
    numbers=left,
    numbersep=5pt,
    numberstyle={\tiny\color{mygray}},
    rulecolor={\color{black}},
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    stepnumber=1,
    stringstyle={\color{mymauve}},
    tabsize=2,
    title={\lstname}
}

\begin{document}
    % \lstinputlisting[caption={Matlab code.},label={lst:matlab-code}]{mod_sys_code.m}

    \begin{lstlisting}
        fprintf("ess = %.2f%%\n", ess);
        fprintf("ess = should look like this\n");
    \end{lstlisting}
\end{document}

有办法解决这个问题吗?

答案1

因此,为了解决这个问题,我必须用单引号( ") 替换命令中使用的双引号 ( )。fprintf'

在此处输入图片描述

答案2

matlab-prettifier如果将'其用作字符串分隔符,则该包可以工作。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
  style              = Matlab-editor,
  basicstyle         = \mlttfamily,
}

\begin{document}
    % \lstinputlisting[caption={Matlab code.},label={lst:matlab-code}]{mod_sys_code.m}

    \begin{lstlisting}
        fprintf('ess = %.2f%%\n', ess);
        fprintf('ess = should look like this\n');
    \end{lstlisting}
\end{document}

在此处输入图片描述

我不知道是否有选项可以让它对"分隔符执行相同的操作...您可以尝试在 GitHub 上提问

相关内容