以下简单的乳胶代码似乎对我不起作用,而且似乎没有原因:
\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}