编辑
用户 @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
只是表明您可以制作一个三列版本。