我正在尝试为longtable
环境创建一个包装器,它与标准\newenvironment
命令配合得很好。现在我想使用包\NewDocumentEnvironment
中的xparse
选项来允许更多可选参数。但结果看起来不同,表格下方出现了一个额外的单元格。也许是由命令中的换行符引起的,因为当我将环境定义的结束代码块移动到起始代码块时\NewDocumentEnvironment
没有出现错误(就像我在环境中的示例中所做的那样)。\end{longtable}
myxparsetable2
我创建了一个最小示例。错误显示为myxparsetable1
。
\documentclass{scrartcl}
\usepackage{xparse}
\usepackage{longtable}
\NewDocumentEnvironment{myxparsetable1}{m}
{\begin{longtable}{#1}}
{\end{longtable}}
\NewDocumentEnvironment{myxparsetable2}{}
{%
\begin{longtable}{|c|c|c|} \hline%
col1 & col2 & col3 \\ \hline%
\end{longtable}%
}
{}
\newenvironment{mytable}[1]
{\begin{longtable}{#1}}
{\end{longtable}}
\begin{document}
Normal longtable:
\begin{longtable}{|c|c|c|} \hline
col1 & col2 & col3 \\ \hline
\end{longtable}
Custom mytable
\begin{mytable}{|c|c|c|} \hline
col1 & col2 & col3 \\ \hline
\end{mytable}
Custom myxparsetable1
\begin{myxparsetable1}{|c|c|c|} \hline
col1 & col2 & col3 \\ \hline
\end{myxparsetable1}
Custom myxparsetable2
\begin{myxparsetable2}
\end{myxparsetable2}
\end{document}
输出如下:
答案1
这是一个已知问题:使用 时, LaTeX 在处理 时内部使用的\NewDocumentEnvironment{foo}
宏是“受保护的”,因此,LaTeX 无法知道对齐即将结束,直到它已经开始新的一行。\endfoo
\end{foo}
\multicolumn
这种情况与将not 作为单元格中的第一个项目的情况非常相似。
如果您想扫描多个参数\begin{foo}
,我可以提供一个解决方案:
\newenvironment{myxparsetable}{}{\end{longtable}}
\RenewDocumentCommand{\myxparsetable}{mO{}o}{%
...something with #2 and #3...
\begin{longtable}{#1}
}