lstlisting
有一个选项叫做frame=
但是当我使用frame=none
in\lstdefinestyle
并将lstlisting
命令放入其中tabular
或longtable
出现错误时
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=none
from 选项时,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}
用作&
“任意分隔符标记”是一个勇敢的选择,任何标记都可以在那里使用,但更改它将需要在使用该标记的包中的几个地方进行更改。
您可以将其报告给软件包维护者。