为什么当不使用 begin/end 时 newenvironment 可以工作,而使用 with 却不行?

为什么当不使用 begin/end 时 newenvironment 可以工作,而使用 with 却不行?

我有两个环境ItemBrokenItemWorking。它们的定义有两个不同之处:

  • ItemBroken需要 2 个参数,其中ItemWorking需要 3 个。
  • ItemBroken已定义之前和之后。ItemWorking而是采用第三个参数而不需要之后。

使用时,ItemBroken它会正常工作,直到\end{ItemBroken}满足条件。这可以在以下 Overleaf 输出中看到:

在此处输入图片描述

MVCE:

\documentclass[10pt]{article}

\usepackage{array}
    \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\newenvironment{ItemBroken}[2]
    {
        -
        & #1
        & \begin{tabular}[t]{@{}L{200pt}@{}}
            #2\\
            \begin{tabular}{ L{200pt} }
                }{
            \end{tabular}\\
        \end{tabular}
    }

\newenvironment{ItemWorking}[3]
    {
        -
        & #1
        & \begin{tabular}[t]{@{}L{200pt}@{}}
            #2\\
            \begin{tabular}{ L{200pt} }
                #3
            \end{tabular}\\
        \end{tabular}
    }

\begin{document}
\begin{tabular}{ R{5pt} L{20pt} | p{200pt} }
    \ItemWorking{Key}{Title}
        {
            Item
        }\\
    \ItemWorking{Key}{Title}
        {
          Item
        }\\
    \ItemWorking{Key}{Title}
        {
          Item
        }\\
    \begin{ItemBroken}{Key}{Title}
        Item
    \end{ItemBroken}\\
    \ItemWorking{Key}{Title}
        {
          Item
        }
\end{tabular}
\end{document}

答案1

如果你有一个表格,那么你可以有一个命令\foo{a}{b}{c}来扩展a&b&c并使用

   \begin{tabular}{ccc}
   \foo{a}{b}{c}
   \end{tabular}

因为

   \begin{tabular}{ccc}
   a&b&c
   \end{tabular}

但是你不能让环境形成\begin{fooenv}{a}{b} c\end{fooenv}一个\begin \end组,所以这将是

   \begin{tabular}{ccc}
   \begingroup a &b &c \endgroup
   \end{tabular}

你不能在一个单元格中开始一个组,而在另一个单元格中结束,

\Itemworking请注意,您对“应该使用它”的定义\newcommand仅仅无法给出错误,因为您有一个空白行被视为强制结束代码。

相关内容