在另一个环境中使用 lstenvironment

在另一个环境中使用 lstenvironment

以下简单的乳胶代码似乎对我不起作用,而且似乎没有原因:

\documentclass[11pt]{article}

\usepackage[T1]{fontenc}
\usepackage{listings}

\lstnewenvironment{deflist}[2][]{%
    \renewcommand{\thelstnumber}{{#2} ::=}%
    \lstset{numbers=left,basicstyle=\ttfamily,#1}%
}{}
\newenvironment{test}[2]{%
    #1
    \begin{deflist}{#2}%
}{\end{deflist}}

\begin{document}
\begin{deflist}{sometest}
Some Item
Some other item
\end{deflist}
\begin{test}{title}{sometest}
Some Item
Some other item
\end{test}

\end{document}

我想要实现的目标:我想要一个环境,其中每行前面都有,#1 ::=以便有效地编写 EBNF 规则。这就是环境的作用deflist。然后我想将它嵌套在另一个环境中,该环境会自动为规则添加标题(可能还有一些其他内容,例如之前中断等)。

上面的代码失败了,甚至没有给我发出错误。如果您仍想阅读整个日志,请单击这里 (pastebin)

答案1

您可以title直接在

\lstnewenvironment{deflist}[3][]{%
    \renewcommand{\thelstnumber}{{#3} ::=}%
    \lstset{numbers=left,basicstyle=\ttfamily,title={#2},#1}%
}{}

然后使用

\begin{deflist}[optional]{title}{sometest}

如果不需要标题,请使用

\begin{deflist}{}{sometest}

另一方面,如果你不喜欢打字{},你可以用使用包的可选参数xparse(我现在没有这样做)。

\documentclass[11pt]{article}

\usepackage[T1]{fontenc}
\usepackage{listings}

\lstnewenvironment{deflist}[3][]{%
    \renewcommand{\thelstnumber}{{#3} ::=}%
    \lstset{numbers=left,basicstyle=\ttfamily,title={#2},#1}%
}{}

\begin{document}
\begin{deflist}{}{sometest}
Some Item
Some other item
\end{deflist}
\begin{deflist}{title}{sometest}
Some Item
Some other item
\end{deflist}

\end{document}

在此处输入图片描述

相关内容