使用 tabularx 包时的一些问题

使用 tabularx 包时的一些问题

编辑

用户 @Mico 和 @WillieWong 花费了大量宝贵的时间tabularx向我解释该软件包的细微差别,对此我将不胜感激。我现在对它的工作原理有了更好的理解,但我更倾向于采纳 @Mico 的建议,因为我觉得,鉴于我目前的 LaTeX 能力(不是很高),我更喜欢他的建议;@WillieWong 的建议更简洁,但略微超出了我的水平(就目前而言)。

因此,下面显示的是我更新后的代码的一个最小工作示例,改编自@Mico 的回答:

\documentclass{article}
\usepackage[margin = 2.54 cm]{geometry}
\usepackage{array}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{amsmath}
\usepackage{amssymb}

\DeclareMathOperator{\E}{E}
\DeclareMathOperator{\Var}{Var}
\setlength{\tabcolsep}{12 pt}
\renewcommand{\arraystretch}{2}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{B}{>{\bfseries}l}

\begin{document}

\section{Binomial Distribution}

\begin{flushleft}
\begin{tabularx}{\linewidth}{@{} B X @{}}
Abbreviation & $B(n, p)$ \\
Type & Discrete \\
Rationale & Sum of $n$ iid Bernoulli random variables \\
Parameter(s) & $n\ \forall\ n \in \mathbb{Z^+}, p\ \forall\ p \in \mathbb{R}, 0 \leq p \leq 1$ \\
Sample Space & $S = \{0, \dots, n\}$ \\
Probability Mass Function & $f(x) = \binom n x p^x (1 - p)^{n - x}\ \forall\ x \in S$ \\
Expectation & $\E(X) = np$ \\
Variance & $\Var(X) = np(1 - p)$ \\
Moment Generating Function & $M_X(t) = (1 - p + pe^t)^n$ \\
Addition Rule & If $X_i \stackrel{\mathrm{iid}}{\sim} B(n_i, p), \mathrm{then} \sum\limits^k_{i = 1} X_i \sim B(n_1 + \dots + n_k, p)$ \\
Relationship(s) & $B(1, p) = \mathrm{Bernoulli} (p)$ \\
\multirow{2}{*}{Approximation(s)} & If $np$ and $np(1 - p)$ are both large, then $B(n, p) \approx \mathcal{N} (np, np[1 - p])$ \\
& If $n$ is large but $np$ is small, then $B(n, p) \approx \mathrm{Pois} (np)$ \\
\end{tabularx}
\end{flushleft}

该表现在如下所示:

更新表

从比较两个表可以看出,我的问题已经解决,而且值得注意的是,我决定坚持\multirow使用而不是\newline为了美观目的。


语境

我对 LaTeX 还很陌生,正在尝试使用它来写自己的笔记,但是在格式方面遇到了一些问题,特别是在使用软件包时tabularx

下面显示的是我的代码的一个最小工作示例:

\documentclass{article}
\usepackage[left = 2.54 cm, right = 2.54 cm, top = 2.54 cm, bottom = 2.54 cm]{geometry}
\usepackage{array}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{amsmath}
\usepackage{amssymb}

\begin{document}

\setlength{\tabcolsep}{18 pt}
\renewcommand{\arraystretch}{2}

\section{Binomial Distribution}

\begin{flushleft}
\begin{tabularx}{\linewidth}{@{}>{\bfseries}l X}
Abbreviation & $B(n, p)$ \\
Type & Discrete \\
Rationale & Sum of $n$ iid Bernoulli random variables $\forall\ n \in \mathbb{Z^+}$ \\
Parameter(s) & $n, p\ \forall\ p \in \mathbb{R}, 0 \leq p \leq 1$ \\
Sample Space & $S = \{0, \dots, n\}$ \\
Probability Mass Function & $f(x) = \binom n x p^x (1 - p)^{n - x}\ \forall\ x \in S$ \\
\multirow{2}{*}{Moments} & $E(X) = np$ \\
& $Var(X) = np(1 - p)$ \\
Moment Generating Function & $M(t) = (1 - p + pe^t)^n$ \\
Addition Rule & If $X_i \stackrel{iid}{\sim} B(n_i, p)\ \forall\ i \in \mathbb{Z^+}$, $i \leq k$, then $\sum\limits^k_{i = 1} X_i \sim B(n_1 + \dots + n_k, p)$ \\
Relationship(s) & $B(1, p) =$ Bernoulli$(p)$ \\
\multirow{2}{*}{Approximation(s)} & If $np$ and $np(1 - p)$ are both large, then $B(n, p) \approx \mathcal{N} (np, np[1 - p])$ \\
& If $n$ is large but $np$ is small, then $B(n, p) \approx$ Pois$(np)$ \\
\end{tabularx}
\end{flushleft}

\end{document}

我的表格如下所示:

表格格式问题

问题

首先,我意识到当第二列中的文本太长并被换行时tabularx,第一列中的对应文本不会自动垂直居中对齐。因此,我的第一个问题是,如何调整我的代码以使两列垂直居中对齐?

其次,我的整个文档将由许多类似的表格组成,其中第一列始终以粗体显示。因此,我的第二个问题是,我怎样才能编写一些代码,比如在序言中(在我开始任何表格之前)自动将所有表格的第一列加粗?

PS:我正在自学 LaTeX 用于学校作业(因为我的大学学位需要大量数学),所以如果我有任何“糟糕的编码”,也请随时建议我如何改进:)

答案1

我如何调整代码以使两列垂直居中对齐?

m为第一列选择(“中间”)列类型,然后\renewcommand{\tabularxcolumn}[1]{m{#1}}为第二列(应该具有类型X)运行。

我怎样才能编写一些代码...来自动将所有表格的第一列加粗?

只需定义一个新的列类型,B如下所示:

\newcolumntype{B}[1]{>{\bfseries\RaggedRight}m{#1}}

如果你想限制列的宽度(并允许自动换行,根据需要)。如果你不想允许换行——因此想让列(几乎)任意宽——只需运行

\newcolumntype{B}{>{\bfseries}l}

请注意,这里B不采取争论。

在此处输入图片描述

\documentclass{article}
\usepackage[margin=2.54cm]{geometry}

\usepackage{tabularx}
\newcolumntype{B}[1]{>{\bfseries\RaggedRight}m{#1}}
\renewcommand{\tabularxcolumn}[1]{m{#1}}

\usepackage{amsmath,amssymb}
\DeclareMathOperator{\E}{E}  % define expectations and variance operators
\DeclareMathOperator{\Var}{Var}
\DeclareMathOperator{\Poiss}{Poiss}

\usepackage{ragged2e} % for '\RaggedRight' macro
\newlength\colwidth
\settowidth\colwidth{\textbf{Moment Generating}} % width of left-hand col.
\begin{document}

\setlength{\tabcolsep}{12pt} % 18pt seems excessive (default is 6pt)
\renewcommand{\arraystretch}{2}


\section{Binomial Distribution}

\begin{flushleft}
\begin{tabularx}{\linewidth}{@{} B{\colwidth} >{\RaggedRight}X @{}}
Abbreviation & $B(n, p)$ \\
Type      & Discrete \\
Rationale & Sum of $n$ iid Bernoulli random variables, $n \in \mathbb{N}^+$ \\
Parameters & $n \in \mathbb{N}^+$, $0 \leq p \leq 1$ \\
Sample Space & $S = \{0, \dots, n\}$ \\
Probability Mass Function & $f(x) = \binom{n}{x} p^x (1 - p)^{n - x}\ \forall\ x \in S$ \\
Moments & $\E(X) = np$\newline $\Var(X) = np(1 - p)$ \\
Moment Generating Function & $M(t) = (1 - p + pe^t)^n$ \\
Addition Rule & If $X_i \stackrel{\text{iid}}{\sim} B(n_i, p)\ \forall\ i \in \mathbb{Z}^+$, $i \leq K$, then $\sum\limits^K_{i = 1} X_i \sim B(n_1 + \dots + n_k, p)$ \\
Relationship(s) & $B(1, p) = \textrm{Bernoulli}(p)$ \\
Approximation(s) & If $np$ and $np(1 - p)$ are both large, then $B(n, p) \approx \mathcal{N} \bigl(np, np(1 - p)\bigr)$. \newline
 If $n$ is large but $np$ is small, then $B(n, p) \approx \Poiss(np)$. \\
\end{tabularx}
\end{flushleft}

\end{document}

答案2

如果您要大量使用相同的格式,您可以随时定义一个新环境来封装您的表格。下面我定义了一个EMtable环绕的环境tabularx。它需要一个必需参数,即第 2 列到第 N 列的列规范。

  • 环境本地将规范更新\tabularxcolumn为使用m而不是p,这样就可以按照您的需要进行垂直对齐。(通过局部重新定义它,您仍然可以tabularx在文档的其他地方使用“常规”规范(如果您需要的话)。
  • 环境将第一列设置为始终l使用粗体字体。您可以自行指定其余列(因此需要参数)。假设您想要使用类似于XX如果您总共有 3 列等的内容。
\documentclass{article}
\usepackage[left = 2.54 cm, right = 2.54 cm, top = 2.54 cm, bottom = 2.54 cm]{geometry}
\usepackage{tabularx}
\usepackage{amsmath}
\usepackage{amssymb}

\newenvironment{EMtable}[1]{\flushleft\renewcommand\tabularxcolumn[1]{m{##1}}\tabularx{\linewidth}{@{}>{\bfseries}l #1}}{\endtabularx}


\begin{document}

\setlength{\tabcolsep}{18 pt}
\renewcommand{\arraystretch}{2}

\section{Binomial Distribution}

\begin{EMtable}{X}
Abbreviation & $B(n, p)$ \\
Type & Discrete \\
Rationale & Sum of $n$ iid Bernoulli random variables $\forall\ n \in \mathbb{Z^+}$ \\
Parameter(s) & $n, p\ \forall\ p \in \mathbb{R}, 0 \leq p \leq 1$ \\
Sample Space & $S = \{0, \dots, n\}$ \\
Probability Mass Function & $f(x) = \binom n x p^x (1 - p)^{n - x}\ \forall\ x \in S$ \\
Moments & $E(X) = np$ \newline
$Var(X) = np(1 - p)$ \\
Moment Generating Function & $M(t) = (1 - p + pe^t)^n$ \\
Addition Rule & If $X_i \stackrel{iid}{\sim} B(n_i, p)\ \forall\ i \in \mathbb{Z^+}$, $i \leq k$, then $\sum\limits^k_{i = 1} X_i \sim B(n_1 + \dots + n_k, p)$ \\
Relationship(s) & $B(1, p) =$ Bernoulli$(p)$ \\
Approximation(s) & If $np$ and $np(1 - p)$ are both large, then $B(n, p) \approx \mathcal{N} (np, np[1 - p])$ \newline
 If $n$ is large but $np$ is small, then $B(n, p) \approx$ Pois$(np)$\\ 
\end{EMtable}

\begin{EMtable}{XX}
        Test & Some text & more text
\end{EMtable}

\end{document}

l由于 OP 表示有兴趣了解其工作原理:粗略地说,对于每个单元格,都会计算一条参考线。对于、c、中的标准单行材料r,这只是该行本身:

OOOO

对于材料p,这是顶行

OOOO
----
----

对于材料来说b,这是底线

----
----
OOOO

对于材料来说m,这是中间

----
OOOO
----

LaTeX 表格会尝试将所有参考线设置为相同的高度。lp因此

OOOO    OOOO
        ----
        ----

lb给出

        ----
        ----
OOOO    OOOO

lm留给读者练习)

环境tabularx基本上使用 的X简写p,但宽度会自动计算。按照\tabularxcolumn上述方法更改规范,即可X将其改为 的简写m,宽度会自动计算。


一些小问题:

  • tabularx该包的一个优点是,在X单元格内您可以使用\newline(但不能!)换行;因此,至少对于所演示的示例,\\您不必使用它。multirow
  • 第二次调用EMtable只是表明您可以制作一个三列版本。

相关内容