如何让 lstdefinestyle 接受带有参数的自定义命令?

如何让 lstdefinestyle 接受带有参数的自定义命令?

Matlab-editor我想自定义包中的样式matlab-prettifier。我想要的是为 MATLAB 样式的命令生成背景,但似乎该basicstyle键不接受带参数的命令

可以通过创建自定义命令来获得此信息,例如

lstinline 的不同背景颜色

但是,我宁愿\lstinline直接使用命令,因为我希望 TeXstudio 突出显示逐字代码。这个主题似乎包含了我想要的内容,但我需要根据我的特定需求进行调整

列表 lstdefinestyle 不适用于自定义命令

这就是我想要的结果

在此处输入图片描述

\documentclass[aspectratio=169, xcolor={x11names}, t, handout]{beamer}

\usetheme{Dresden}
\usefonttheme{professionalfonts}
\renewcommand{\sfdefault}{ppl}

\usepackage[T1]{fontenc}
\renewcommand{\encodingdefault}{T1}

\usepackage{bigstrut}

\usepackage[]{matlab-prettifier}
% BEGIN_FOLD

\lstdefinestyle{matlab-inline}{
    % style
    style=Matlab-editor, % default style for matlab pretification
    basicstyle=\linespread{0.8}\mlttfamily\color{DodgerBlue3}, % font style and size
}

% END_FOLD

\usepackage{tikz}

\newcommand{\matlabinline}[1]
{%
    \begin{tikzpicture}[baseline]
        \node[fill=Ivory1, inner sep=0mm, outer sep=0mm,  inner xsep=0mm, inner ysep=1pt, opacity=0.75, anchor=base] (node) {\bigstrut#1};
    \end{tikzpicture}%
}

\begin{document}

\begin{frame}[fragile, environment=frame, allowframebreaks=0.99]
    
    \smash{\rlap{\vrule width 0.1pt depth 0em height 0.75em}}%
    \smash{\rlap{\rule{\linewidth}{0.1pt}}}%
    \matlabinline{\lstinline[style=matlab-inline]|plot(X1, Y1, LineSpec1)|} \lstinline[style=matlab-inline]|plot(X1, Y1, LineSpec1)|
    
\end{frame}

\end{document}

答案1

据我所知,如果不打补丁,就没有办法解决这个问题lstinline。不建议打补丁,对于你的具体问题,我认为替代解决方案(更改 TeXStudio 中的语法突出显示)同样有效 - 请参阅 让 TeXstudio 语法高亮识别自定义逐字环境 ,但如果你坚持有这样一种方法:

%! TEX program = pdflatex

\documentclass[aspectratio=169, xcolor={x11names}, t, handout]{beamer}

\usetheme{Dresden}
\usefonttheme{professionalfonts}
\renewcommand{\sfdefault}{ppl}

\usepackage[T1]{fontenc}
\renewcommand{\encodingdefault}{T1}

\usepackage{bigstrut}

\usepackage[]{matlab-prettifier}
% BEGIN_FOLD

\lstdefinestyle{matlab-inline}{
    % style
    style=Matlab-editor, % default style for matlab pretification
    basicstyle=\linespread{0.8}\mlttfamily\color{DodgerBlue3}, % font style and size
}

% END_FOLD

\usepackage{tikz}

\NewCommandCopy \oldlstinline \lstinline

\ExplSyntaxOn

\RenewDocumentCommand \lstinline {o v} {
    \begin{tikzpicture}[baseline]
        \node[fill=Ivory1, inner~sep=0mm, outer~sep=0mm,  inner~xsep=0mm, inner~ysep=1pt, opacity=0.75, anchor=base]
            (node) {\bigstrut \oldlstinline[#1]{#2}};
    \end{tikzpicture}
}
\ExplSyntaxOff

\fastrecompileendpreamble
\begin{document}

\begin{frame}[fragile, environment=frame, allowframebreaks=0.99]
    
    \smash{\rlap{\vrule width 0.1pt depth 0em height 0.75em}}%
    \smash{\rlap{\rule{\linewidth}{0.1pt}}}%

    \lstinline[style=matlab-inline]|plot(X1, Y1, LineSpec1)|
    
\end{frame}

\end{document}

它重新定义了lstinline代码中描述的方式。

相关内容