如何在新环境中包含 tabularx/y?

如何在新环境中包含 tabularx/y?

我正在寻找一种方法来为我的乳胶文档中的表格定义可自定义的环境。这意味着:

  • 标题和标签
  • 桌子的寬度
  • 自定义列格式(表格序言)

虽然这对于图形来说似乎很容易,但我迫切地寻找表格的解决方案。这是我的最小代码示例:

\documentclass[a4paper,fontsize=14pt,DIV=calc]{scrbook}
\usepackage{tabularx,tabulary}

\newenvironment{tabfig}[4]
{\begin{table}
 \captionabove{#2}\label{tab:#1}
 \begin{tabularx}{#3}{#4}}
{\end{tabularx}\end{table}}

\begin{document}
  \begin{tabfig}{MyLabel}{MyCaption}{0.8\textwidth}{l >{\centering}X >{\centering}X}
    A & B & C \tabularnewline
    x & y & z \tabularnewline
  \end{tabfig}
\end{document}

到目前为止,我已经进行了几天的深入研究,还尝试了、、、\bgroup包和其他各种东西。不过,在这种一般情况下,我无法想出有用的东西。伙计们,我不敢相信我是第一个编写可自定义表格环境的人。有谁能点亮灯吗?\begingroup\begintabularxcprotect

答案1

尝试这个:

\documentclass[a4paper,fontsize=14pt,DIV=calc]{scrbook}
\usepackage{tabularx,tabulary}

\newenvironment{tabfig}[4]{%
     \table\centering%
     \captionabove{#2}\label{tab:#1}%
     \tabularx{#3}{#4}%
}{%
     \endtabularx%
     \endtable%
}%

\begin{document}
\begin{table}
 \captionabove{MyCaption}\label{tab:MyLabel}
 \begin{tabularx}{0.8\textwidth}{l >{\centering}X >{\centering}X}
    A & B & C \tabularnewline
    x & y & z \tabularnewline
\end{tabularx}\end{table}

  \begin{tabfig}{MyLabel}{MyCaption}{0.8\textwidth}{l >{\centering}X >{\centering}X}
    A & B & C \tabularnewline
    x & y & z \tabularnewline
  \end{tabfig}
\end{document}

答案2

由于解决方案并不完全简单,我想在完整的代码示例中总结问题的答案,以供您在文档中使用:

\documentclass[a4paper,fontsize=14pt,DIV=calc]{scrbook}
\usepackage{tabularx,tabulary,booktabs,environ}

\newlength{\tabmargin}% necessary if you want the caption to be aligned with the table
\newlength{\tabwidth}%

\NewEnviron{tabfigx}[4]{%
 \setlength{\tabwidth}{#3}\setlength{\tabmargin}{\linewidth}%
 \addtolength{\tabmargin}{-\the\tabwidth}\setcapmargin{0.5\tabmargin}%
 \table[!htb]%
 \captionabove{#2}\label{tab:#1}%
 \centering%
 \tabularx{#3}{#4}%
 \toprule%
 \BODY%
 \bottomrule% or what else you would like to do after the table has been done...
}[\endtabularx\endtable]%

\begin{document}
  \begin{tabfigx}{MyLabel}{MyCaption}{0.8\textwidth}{l >{\centering}X >{\centering}X}
    A & B & C \tabularnewline
    x & y & z \tabularnewline
  \end{tabfigx}
\end{document}

如果您想使用该tabulary包,只需定义一个类似的宏并相应地更改包含和的tabfigy行。另一种方法是使用\tabularx\endtabularx浮行包。就我个人而言,我会继续使用 KOMA 脚本加上一些扩展宏。

相关内容