如何重新定义具有参数的环境?

如何重新定义具有参数的环境?

为了从同一组源生成 html 和 pdf 文件,我需要将所有 wrapfigure 环境(包 wrapfig)转换为标准图形环境。一个例子是:

\begin{wrapfigure}[15]{i}{0pt}
\includegraphics[width=0.40\textwidth]{parabola}
\caption{La traiettoria bla bla.}
\label{fig:parabola}
\end{wrapfigure}

定义类似这样的内容(并且不加载 wrapfig 包):

\newenvironment{wrapfigure}[3]{\begin{figure}[htb]\centering}{\end{figure}}

可以工作,但在图像和标题之间留下了令人讨厌的 ']i0pt'。有什么想法吗(除了手动编辑生成的 html...)谢谢!

答案1

wrapfig手册指出语法是:

\begin{wrapfigure}[<number of narrow lines>]{<placement>}[<overhang>]{<width>}
    <figure>
\end{wrapfigure}

请注意两个可选参数和两个强制参数。您需要定义一个替换参数来删除所有这些可能的参数。这可以通过使用环境参数删除前两个参数,然后使用 gobble 宏删除其他两个参数来实现:

\newcommand{\gobbleom}[2][]{}
\newenvironment{wrapfigure}[2][]
    {\begin{figure}[htb]\centering\gobbleom}
    {\end{figure}}

您还可以使用该xparse包来定义具有两个这样的可选参数的环境:

\usepackage{xparse}
\DeclareDocumentEnvironment{wrapfigure}{omom}
      {\begin{figure}[htb]\centering}
      {\end{figure}}

如果您想重新定义非常复杂的宏或环境,使用xparse非常有用。但是,如果您想减少使用的包的数量,我会选择第一种方法。

相关内容