在用户宏中使用制表符时出现问题

在用户宏中使用制表符时出现问题

我在用户宏中使用 tabulary 时遇到了问题。该宏的目的是根据行数决定是使用 longtable 还是 tabulary。下面是 MWE(或 MNWE,因为它演示了这个问题):

\documentclass{article}

\usepackage{longtable} 
\usepackage{tabulary}

% Macro to decide on type of table to use depending on number of rows.
\newcommand{\tableintro}[2]{\ifnum #1 > 10
  \begin{longtable}{#1}
\else
  \begin{table}[h!]
  \tabulary{\columnwidth}{#1}
\fi}

\newcommand{\tableend}[1]{\ifnum #1 > 10
  \end{longtable}
\else
  \endtabulary
  \end{table}
\fi}

\begin{document}

Declare a short table with two rows and three columns:

\tableintro{2}{r r r}
10 & 5 & 8.5 \\
10 & 5 & 8.5
\tableend{2}

\end{document}

如果我将宏从 tabulary 更改为 tabular(并删除 \columnwidth),它就可以正常工作。如果我直接输入相同的 tabulary 表格而不使用宏,它就可以正常工作。但是,由于某种原因,在宏中使用 tabulary 时它会失败。我收到此错误:

! File ended while scanning use of \TY@get@body.

但我不知道为什么。

答案1

在此处输入图片描述

与大多数将其主体作为参数抓取的环境一样,嵌套时需要使用命令形式。此外,语法应该是一个环境,并且您需要考虑需要 LCR 列的表格:

\documentclass{article}

\usepackage{longtable} 
\usepackage{tabulary}

% Macro to decide on type of table to use depending on number of rows.
\newenvironment{tableintro}[1]{%
\ifnum #1 > 10
\newcolumntype{R}{r}%
\let\endtableintro\endlongtable
\expandafter\longtable
\else
  \def\endtableintro{\endtabulary\endtable}%
  \def\tmp{\table[htp!]\tabulary{\columnwidth}}%
  \expandafter\tmp
\fi}%
{}


\begin{document}

Declare a short table with two rows and three columns:

\begin{tableintro}{2}{R R R}
10 & 5 & 8.5 \\
10 & 5 & 8.5
\end{tableintro}

\begin{tableintro}{20}{R R R}
10 & 5 & 8.5 \\
10 & 5 & 8.5
\end{tableintro}

\end{document}

相关内容