![如何正确地将 tabularx 包装在 threeparttable 中?](https://linux22.com/image/411038/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%9C%B0%E5%B0%86%20tabularx%20%E5%8C%85%E8%A3%85%E5%9C%A8%20threeparttable%20%E4%B8%AD%EF%BC%9F.png)
我的问题基本上在标题中。我试过了,但无法让它工作,尽管threeparttable
文档明确声明兼容tabularx
。以下是我迄今为止尝试过的:
main.tex
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage[english]{babel}
\usepackage{testpack}
\usepackage{lipsum}
\begin{document}
\begin{tabxn}{label}{Caption}{Xr}{\textwidth}
Head A & Head B \\
\midrule
\lipsum[1] & Something\tnote{a}
\tabxnotes
\item[a] Some remark;
\end{tabxn}
\end{document}
testpack.sty
\ProvidesPackage{testpack}
\RequirePackage{float}
\RequirePackage{booktabs}
\RequirePackage{tabularx}
\RequirePackage[para,flushleft]{threeparttable}
\makeatletter%
\newcommand{\tabxnotes}{\bottomrule\end{tabularx}\begin{tablenotes}}%
\newenvironment{tabxn}[5][\fps@table]{%
\expanded{\noexpand\begin{table}[#1]}%
\label{tab:#2}%
\caption{#3}%
\begin{threeparttable}%
\centering%
\begin{tabularx}{#5}{#4}%
\toprule%
}{%
\end{tablenotes}%
\end{threeparttable}
\end{table}%
}%
\newcommand{\tabxnfile}[5][\fps@table]{%
\begin{scitabxn}[#1]{#2}{#3}{#4}{#5}%
\input{tab/#2}%
\end{scitabxn}%
}%
\makeatother%
main.log
(摘抄)
Runaway argument?
\par
! File ended while scanning use of \TX@get@body.
<inserted text>
\par
<*> main.tex
我知道这应该告诉我我可能忘记了右括号、a\end{env}
或类似的东西,但我通过三重检查没有发现任何东西。我该如何让它工作,如果不行,我处理这个问题的方式有什么缺陷?
编辑:进一步追踪错误,它似乎在命令中\tabxnotes
。当我用命令替换其内容时,MWE 会编译。然而,为了保持干燥,我想把这些东西放在一个命令里,而不是三个。
答案1
编辑:进一步追踪这个错误,它似乎出现在
\tabxnotes
命令中。
你基本上不能这样做
\newcommand{\tabxnotes}{\bottomrule\end{tabularx}\begin{tablenotes}}%
您可以定义tabularx
为另一个的一部分环境但你不能用一个命令开始它,用另一个命令结束它,有使用环境形式。
环境是 latex 中的基本语法构造,隐藏该语法通常不是一个好主意。但诸如tabularx
或 AMS 对齐之类的环境align
是特殊的环境形式,需要环境语法才能获取环境主体。