作为文档流程/工作流的一部分,使用环境更容易。但是,在某些情况下,环境内容需要特定的格式。因此,使用environ
包裹捕捉环境\BODY
,然后根据需要使用它。
但是下面的基本实现却不起作用:
\documentclass{article}
\usepackage{environ}
\NewEnviron{HEADING}{%
\item[\BODY]
}
\begin{document}
\begin{description}
\begin{HEADING}
Heading
\end{HEADING}
\end{description}
\end{document}
我怎样才能以预期的方式将其作为参数进行处理environ
?HEADING
\BODY
答案1
你必须\item[...]
在环境之外执行,因为它必须位于列表的外层。原因是\item
会\@item
设置\everypar
;将其放在组中会导致各种问题。
\documentclass{article}
\usepackage{environ}
\NewEnviron{HEADING}{%
\expandafter\gdef\expandafter\THISHEADING\expandafter{%
\expandafter\item\expandafter[\BODY]%
}%
\aftergroup\THISHEADING
}
\begin{document}
\begin{description}
\begin{HEADING}
Heading
\end{HEADING}
Something to follow
\end{description}
\end{document}
答案2
我在常规环境中尝试了此操作,但出现了相同的错误,所以这不是什么错误。解决这个问题似乎需要欺骗 LaTeX,所以请谨慎对待以下内容。说实话,如果不查看源代码,我不确定为什么需要environ
额外的操作。\mbox{}
\documentclass{article}
\usepackage{environ}
\NewEnviron{HEADING}{%
\item[\BODY]%
\mbox{}% <-- this is important
}
\begin{document}
\section{testing}
some test before
\begin{description}
\begin{HEADING}
Heading
\end{HEADING}
text
\end{description}
some text after
\section{normal}
some test before
\begin{description}
\item[Heading]
text
\end{description}
some text after
\end{document}