使用带有多个参数的 environ 包设置环境的语法

使用带有多个参数的 environ 包设置环境的语法

我无法正确理解语法。我正在尝试使用下面的答案来帮助我。

如何使用条件在编译时定义不同的 \begin 和 \end 环境

我正在尝试为 tex4ht 与 pdflatex 设置环境。如果 tex4ht 正在运行,则环境将是

\begin{Verbatim}
   .......
\end{Verbatim}

如果 pdflatex 正在运行,那么它将

\begin{Verbatim}[samepage,fontsize=\small,frame=single]
   .......
\end{Verbatim}

我无法弄清楚 API 如何\NewEnviron[....]

这是 MWE

\documentclass{article}%    
\usepackage{fancyvrb}
\usepackage{array}%for m option

\usepackage{environ}
\NewEnviron{X}[4][]{%  takes 4 arguments, samepage,fontsize=..,frame=...,Verbatim
  \ifdefined\HCode %htlatex
    \begin{#4}
      \BODY
    \end{#4}
  \else% pdflatex
    \begin{#4}[#1,#2,#3]  %is this right?
      \BODY
    \end{#4}
  \fi%
}

\begin{document}

\begin{tabular}[c]{|m{4in}|m{2.5in}|}\hline
\textbf{Mathematica}
\begin{X}[samepage][fontsize=\small][frame=single]{Verbatim}  %is this right?

    {(10 E^(-t/10) HeavisideTheta[t] 
       Sin[(3 Sqrt[11] t)/10])/(3 Sqrt[11])}   some Verbatim stuff

\end{X}
&
   some text
\\\hline
\end{tabular}

\end{document}

以上内容应变为以下内容(如果 pdflatex 正在运行)

\begin{tabular}[c]{|m{4in}|m{2.5in}|}\hline
\textbf{Mathematica}
\begin{Verbatim}[samepage,fontsize=\small,frame=single]

   {(10 E^(-t/10) HeavisideTheta[t] 
       Sin[(3 Sqrt[11] t)/10])/(3 Sqrt[11])}

\end{Verbatim}
&
   some text
\\\hline
\end{tabular}

如果 tex4ht 正在运行,它应该变成

\begin{tabular}[c]{|m{4in}|m{2.5in}|}\hline
\textbf{Mathematica}
\begin{Verbatim}

    {(10 E^(-t/10) HeavisideTheta[t] 
       Sin[(3 Sqrt[11] t)/10])/(3 Sqrt[11])}

\end{Verbatim}
&
   some text
\\\hline
\end{tabular}

我尝试如下调用它

\begin{X}[samepage,fontsize=\small,frame=single]{Verbatim} 

但这没有帮助。我一直收到语法错误Missing $ inserted \end{X} 等等extra }......

也尝试过

\begin{X}[samepage],[fontsize=\small],[frame=single]{Verbatim} 

设置此环境的正确语法是什么?使用 texlive 2013 和 Miktex

答案1

您不能使用 定义逐字环境\NewEnviron,因为它们会吸收环境的内容作为参数,因此无法执行逐字所必需的类别代码更改。

有一种更简单的方法:用两种不同的方式定义环境,而不是一种改变行为的环境。

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{array}%for m option


\ifdefined\HCode % tex4ht
  \DefineVerbatimEnvironment{X}{Verbatim}{}
\else
  \DefineVerbatimEnvironment{X}{Verbatim}{samepage,fontsize=\small,frame=single}
\fi

\begin{document}

\begin{tabular}[c]{|m{3in}|m{1in}|}\hline
\textbf{Mathematica}
\begin{X}
    {(10 E^(-t/10) HeavisideTheta[t]
       Sin[(3 Sqrt[11] t)/10])/(3 Sqrt[11])}
\end{X}
&
some text\\
\hline
\end{tabular}

\end{document}

相关内容