在 \lstdefinestyle 中的 lstlisting 选项中添加 frame=none 会导致表格错误

在 \lstdefinestyle 中的 lstlisting 选项中添加 frame=none 会导致表格错误

lstlisting有一个选项叫做frame=

Mathematica 图形

但是当我使用frame=nonein\lstdefinestyle并将lstlisting命令放入其中tabularlongtable出现错误时

  Forbidden control sequence

这似乎是某种类型的 key=value 冲突。以下是 MWE

\documentclass[11pt]{article}
\usepackage{listings}
\usepackage{matlab-prettifier}
\lstdefinestyle{matlab}{style=Matlab-editor,
  basicstyle=\ttfamily\normalsize,
  escapechar         = `,
  mlshowsectionrules = true,frame=none}

\begin{document}    
\begin{tabular}{p{0.5\textwidth} }
\begin{lstlisting}[style=matlab]
clear all;
the_zeros = [-1 -2];
\end{lstlisting}
\end{tabular}
\end{document}

编译

pdflatex foo2.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./foo2.tex
LaTeX2e <2015/10/01> patch level 2
Babel <3.9m> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/size11.clo))
(/usr/local/texlive/2015/texmf-dist/tex/latex/matlab-prettifier/matlab-prettifi
er.sty (/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def))
(/usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg)
(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty)))
(/usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.sty
(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2015/texmf-dist/tex/latex/listings/lstmisc.sty)
(/usr/local/texlive/2015/texmf-dist/tex/latex/listings/listings.cfg)))
(./foo2.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd)
(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
)
Runaway definition?
#1\\none\@endpbox \hskip \tabcolsep 
! Forbidden control sequence found while scanning definition of \lst@temp.
<inserted text> 
                }
l.14 \begin{lstlisting}[style=matlab]

? 

当我删除frame=nonefrom 选项时,Latex 运行正常,没有错误。此选项有效。如果我从表格内部删除代码,它也可以使用该选项编译成功:

\documentclass[11pt]{article}
\usepackage{matlab-prettifier}
\lstdefinestyle{matlab}{style=Matlab-editor,
  basicstyle=\ttfamily\normalsize,
  escapechar         = `,
  mlshowsectionrules = true,frame=none}

\begin{document}        
\begin{lstlisting}[style=matlab]
clear all;
the_zeros = [-1 -2];
\end{lstlisting}
\end{document}

没有错误。

问题是:为什么在内部使用 tabular 和 longtable 时会出现错误,frame=none而在外部则不会出现错误?我需要使用该选项frame,并将列表放在表格内。

lstset我还发现,如果我像这样使用,它会起作用

\documentclass[11pt]{article}
\usepackage{listings}
\usepackage{matlab-prettifier}
\lstset{style=Matlab-editor,
  basicstyle=\ttfamily\normalsize,
  escapechar         = `,
  mlshowsectionrules = true,frame=none}

\begin{document}    
\begin{tabular}{p{0.5\textwidth} }
    \begin{lstlisting}
    clear all;
    the_zeros = [-1 -2];
    \end{lstlisting}
\end{tabular}
\end{document}

但是我需要使用\lstdefinestyle 来定义样式,因为我需要使用其他语言的列表,并且我不想lstset全局设置一个。这就是我加载的原因listings。我有\lstdefinestyle其他语言的选项,我没有显示出来。但只有这个选项frame=会出错。

2015 年

答案1

看起来像是一个错误,但像往常一样,这些事情,一个额外的{}帮助

\documentclass[11pt]{article}
\usepackage{listings}
\usepackage{matlab-prettifier}
\lstdefinestyle{matlab}{style=Matlab-editor,
  basicstyle=\ttfamily\normalsize,
  escapechar         = `,
  mlshowsectionrules = true,
frame=none
}

\begin{document}

\begin{tabular}{p{0.5\textwidth} }
{\begin{lstlisting}[style=matlab]
clear all;
the_zeros = [-1 -2];
\end{lstlisting}}
\end{tabular}
\end{document}

列表中的错误就在这里

\def\lstKV@SwitchCases#1#2#3{%
    \def\lst@temp##1\\#1&##2\\##3##4\@nil{%
        \ifx\@empty##3%
            #3%
        \else
            ##2%
        \fi
    }%
    \lst@temp\\#2\\#1&\\\@empty\@nil}

用作&“任意分隔符标记”是一个勇敢的选择,任何标记都可以在那里使用,但更改它将需要在使用该标记的包中的几个地方进行更改。

您可以将其报告给软件包维护者。

相关内容