新的表格环境、新环境中的空格和封闭的 { }

新的表格环境、新环境中的空格和封闭的 { }

我很难找到一个合适的标题(请随意更改)来回答我的问题,我想用一个例子来介绍:

情况

在我的文档中,我有时tabu直接在文档中使用 s,而不将它们嵌套在table- 环境中。

\documentclass[a4paper, 11pt]{scrbook}
\usepackage{blindtext}

\usepackage{tabu, booktabs}

\begin{document}
\section{TEST}
\blindtext
\\ \\
This is how I want my table to look like:

\ \\
{\centering
\begin{tabu} to 0.9\textwidth {X[l,2] X[l,2] X[l,3]}    \toprule \rowfont{\bfseries}
Test1   &   Test2   &   Test3   \\ \midrule
Test1   &   Test2   &   Test3   \\
Test1   &   Test2   &   Test3   \\ \bottomrule
\end{tabu}\par} \medskip \ \\
\blindtext
\end{document}

现在,我想创建一个新的环境来帮助我构建这个表,我尝试了这样的事情:

\newenvironment{texttab}[1]
    {\ \\ \centering%
    \begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}%
    {\end{tabu}\par \medskip \ \\}

当然,这里#1给出了tabu-specifications。它有点工作正常,但如果你运行以下 MWE(添加和测试新环境)

\documentclass[a4paper, 11pt]{scrbook}
\usepackage{blindtext}

\usepackage{tabu, booktabs}

\newenvironment{texttab}[1]
    {\ \\ \centering%
    \begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
    {\end{tabu}\par \medskip \ \\}

\begin{document}
\section{TEST}
\blindtext
\\ \\
This is how I want my table to look like:          % no new environment

\ \\
{\centering
\begin{tabu} to 0.9\textwidth {X[l,2] X[l,2] X[l,3]}    \toprule \rowfont{\bfseries}
Test1   &   Test2   &   Test3   \\ \midrule
Test1   &   Test2   &   Test3   \\
Test1   &   Test2   &   Test3   \\ \bottomrule
\end{tabu}\par} \medskip \ \\
\blindtext

\begin{texttab}{X[l,2] X[l,2] X[l,3]}              % WITH NEW ENVIRONMENT
Test1   &   Test2   &   Test3   \\ \midrule
Test1   &   Test2   &   Test3   \\
Test1   &   Test2   &   Test3   \\ \bottomrule
\end{texttab}
\blindtext
\end{document}

您将看到在第二个表格之后的盲文开头有一个缩进。即使\noindent像这样添加到新环境中

\newenvironment{texttab}[1]
    {\ \\ \centering%
    \begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
    {\end{tabu}\par \medskip \ \\ \noindent}         % added \noindent here

没有帮助,因为它仍然留下一些空间(我可以用它删除\!\!,但是......)。

如果我可以在第一个代码示例中使用包含 and 的{and ,那么这不会成为问题。但是,我无法将它们放入新环境的定义中,因为这会导致分隔符问题……我不想使用-environment,因为其中存在不需要的垂直空格(在撰写本文时,这似乎有点可笑……)}{\centering\par}center

\newenvironment{texttab}[1]
    {{\\centering%               % } missing!
    \begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}%
    {\end{tabu}\par} \medskip \ \\}      % { missing!

问题

  1. 有没有办法,可以摆脱运行版本中出现的那些“无法控制的空间”,或者使最后一段代码可行?(我不想minipage在这里使用,因为我可能想用 使它易碎longtabu。)
  2. 那么,继续使用(目前)有效的“新环境”:为什么不

    \newenvironment{texttab}[2]
        {\ \\ \centering%
        \begin{#1tabu} to 0.9\textwidth {#2} \toprule \rowfont{\bfseries}}
        {\end{#1tabu}\par \medskip \ \\}
    

    工作,这样我就可以通过设置第一个参数轻松地将其更改tabu为?longtabulong

  3. 我是否应该尝试将所有这些打包成一个新的命令有几个参数?

  4. 您是否认为整个想法可能是……愚蠢的?

答案1

我认为保持简单更好。;-)

\documentclass[a4paper, 11pt]{scrbook}
\usepackage{blindtext}

\usepackage{tabu, booktabs}

\newenvironment{texttab}[1]
  {\setlength{\topsep}{\baselineskip}%
   \begin{center}
   \begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
  {\end{tabu}\end{center}}

\begin{document}
\section{TEST}
This is how I want my table to look like:          % no new environment
\begin{center}
\begin{tabu} to 0.9\textwidth {X[l,2] X[l,2] X[l,3]}    \toprule \rowfont{\bfseries}
Test1   &   Test2   &   Test3   \\ \midrule
Test1   &   Test2   &   Test3   \\
Test1   &   Test2   &   Test3   \\ \bottomrule
\end{tabu}
\end{center}
\blindtext
\begin{texttab}{X[l,2] X[l,2] X[l,3]}              % WITH NEW ENVIRONMENT
Test1   &   Test2   &   Test3   \\ \midrule
Test1   &   Test2   &   Test3   \\
Test1   &   Test2   &   Test3   \\ \bottomrule
\end{texttab}
\blindtext
\end{document}

为了控制表格上方和下方的垂直间距,请修改 的值\topsep,而不是使用\\(这应该绝不用于“留空行”)。我使用了\topsep=\baselineskip,请根据您的需要进行更改;老实说,我甚至没有设置它,所以使用默认值。

在此处输入图片描述

您可以通过定义来解决第二个问题

\newenvironment{texttab}[2][]
  {\def\longornot{#1}\setlength{\topsep}{\baselineskip}%
   \begin{center}
   \begin{#1tabu} to 0.9\textwidth {#2} \toprule \rowfont{\bfseries}}
  {\expandafter\end\expandafter{\longornot tabu}\end{center}}

所以你可以说

\begin{texttab}[long]{X[l,2] X[l,2] X[l,3]}
...
\end{texttab}

但我更喜欢定义一个不同的环境,比如

\newenvironment{texttab*}[1]
  {\setlength{\topsep}{\baselineskip}%
   \begin{center}
   \begin{longtabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
  {\end{longtabu}\end{center}}

问题是您不能#1在最后一个参数中使用\newenvironment。请自行选择。

相关内容