定义带有可选标题的新环境

定义带有可选标题的新环境

我正在尝试定义一个带有可选标题的新表格环境。但是,如果我不传递标题,表格下方仍会出现“表格 1.1:”。我这里漏掉了什么?谢谢。下面是示例。

如果我这样调用它,它就会按预期工作。

\begin{mytable}[This is the caption]
% table content goes here
\end{mytable}

但如果我这样调用,我会得到“表 1.1:”,但后面什么都没有。在没有提供标题的情况下,我显然希望“表 1.1:”不出现。

\begin{mytable}
% table content goes here
\end{mytable}

新环境定义:

\def\mycaption{\relax}
\newenvironment{mytable}[1][]
{
    \if\relax\detokenize{#1}\relax
    \gdef\mycaption{\relax}
    \else
    \gdef\mycaption{#1}
    \fi
    \begin{table}[ht]
        \centering
            \begin{tabular}{lccc}
                & \textbf{\vocalsn} & \textbf{\nonvocalsn} & \textit{Totals} \\
                \hline
}
{
                \hline
            \end{tabular}
        \caption{\mycaption}
        \fi
    \end{table}
}

答案1

您始终会执行,\caption因此即使标题文本为空,您也始终会得到标题。将对的调用放入\caption对的重新定义中\mycaption,例如,

...
  \gdef\mycaption{}%
\else
  \gdef\mycaption{\caption{#1}}%
\fi
...
\mycaption

答案2

更简单一点xparse

\usepackage{xparse}
\NewDocumentEnvironment{mytable}{ o }
 {\begin{table}[ht]
  \centering
  \begin{tabular}{lccc}
    & \textbf{\vocalsn} & \textbf{\nonvocalsn} & \textit{Totals} \\
  \hline}
 {\hline
  \end{tabular}
  \IfValueT{#1}{\caption{#1}}
  \end{table}}

xparse也可以在“结束部分”使用参数;\IfValue...仅当指定了可选参数时,条件才为真,因此

\IfValueT{#1}{\caption{#1}}

仅当可选参数实际表达时才插入标题。

相关内容