![定义带有可选标题的新环境](https://linux22.com/image/264773/%E5%AE%9A%E4%B9%89%E5%B8%A6%E6%9C%89%E5%8F%AF%E9%80%89%E6%A0%87%E9%A2%98%E7%9A%84%E6%96%B0%E7%8E%AF%E5%A2%83.png)
我正在尝试定义一个带有可选标题的新表格环境。但是,如果我不传递标题,表格下方仍会出现“表格 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}}
仅当可选参数实际表达时才插入标题。