我在用户宏中使用 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}