基本上我想做这样的事情
\newenvironment{myenv}
{\begin{enumerate}[\bfseries 1.]}
{\end{enumerate}}
如果我省略参数([\bfseries 1.]
),它就会起作用,但是如果有参数,当我使用我的环境时,我会得到:
! LaTeX Error: Something's wrong--perhaps a missing \item.
我怎样才能实现这个目标?
对软件包列表 ( \begin{lstlistings}
) 执行相同的操作甚至在没有任何参数的情况下也不起作用。这当然与 TeX 的工作方式有关,我真的不了解它的内部原理。请给我讲讲。
答案1
第一个错误与定义无关\newenvironment
。enumerate
没有可选参数,因此您会得到相同的错误
\documentclass{article}
\begin{document}
\begin{enumerate}[\bfseries 1.]
\item zzz
\end{enumerate}
\end{document}
因为它尝试排版[
没有前面任何内容的文本\item
。
你可以加
\usepackage{enumerate}
或更好,
\usepackage[shortlabels]{enumitem}
定义enumerate
使用该语法的版本。(您使用的语法来自包enumerate
,但enumitem
如果给出选项,将会模拟它shortlabels
。
的问题listings
有所不同。类似逐字的环境不能用于其他命令的参数或定义中。请参阅 listings 包文档以了解其自定义环境定义机制\lstnewenvironment
。