latex如何使表格与页面同宽?

关注者
26
被浏览
294,769

6 个回答

授人以鱼不如授人以渔。当然我这里假定了 LaTeX 用户都是好学的,而不是只单纯要答案的伸手党。

一般遇到 LaTeX 的问题,我都是先从预安装的文档里找答案。一般 LaTeX 的发行版用来找文档的命令都是 texdoc,取决于你的发行版,如果是MikTeX的话,命令是 mthelp。

texdoc latex2e

输入上面的命令后,应该会弹出来一个 Reference Manual,很多基本的问题都能在这里找到答案。很多值得翻阅的文档还有 classes、amsldoc、array 和 hyperref。

我阅读了文档 latex2e 中与tabular相关的部分,发现如果我要仅仅使用 LaTeX 本身来实现这个功能,会涉及到一些底层知识。我不想花这个时间重新造轮子,所以就去网上搜了一下,看看别人是怎么完成同样的功能的。其实很多你的问题,在 TeX StackExchange 上都已经有人问过了,我得到了这个方案 [1] 。这个答案使用了 tabularx 这个包。注意到这个答案的编辑者正是这个包的作者,所以我建议大家学好外语,来和这些包的作者们直接交流。我还见过文档只有法文的 (systeme,说的就是你),我虽然不会法文,但是凭借自己猜东西的能力,居然看懂了。

texdoc tabularx

通过上面的命令,我查看了 tabularx 的文档,根据文档,我写下了下面的极小有效示例 (minimal working example, MWE)。

\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{tabularx}
\begin{document}
\lipsum[1]
\begin{table}[h]
  \centering
  \newcolumntype{Y}{>{\raggedleft\arraybackslash}X}
  \begin{tabularx}{\textwidth}{|X|Y|X|}
    \hline
    1 & 2 & 3 \\
    \hline
    3 & 5 & 6 \\
    \hline
    7 & 8 & 9 \\
    \hline
  \end{tabularx}
  \caption{This is an example table}
\end{table}
\lipsum[2]
\end{document}

上面用到的 lipsum [2] ,只是为了给表格周围填充一些文字,好看出整体效果。结果截图如下。

我这里用了 \textwidth,其实 \linewidth 在这里也是不错的选择,关于这两者的区别,大神 egreg 在这里 [3] 也有很好的解释。

我上面是以一种比较正常的意思去解读你的问题,如果你的“表格于页面同宽”是指与整张纸同宽的话 [4] ,稍微麻烦一点,而且结果也不好看,如下。

\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{tabularx}
\begin{document}
\lipsum[1]
\begin{table}[h]
  \centering
  \newcolumntype{Y}{>{\raggedleft\arraybackslash}X}
  \makebox[\textwidth]{
  \begin{tabularx}{\paperwidth}{|X|Y|X|}
    \hline
    1 & 2 & 3 \\
    \hline
    3 & 5 & 6 \\
    \hline
    7 & 8 & 9 \\
    \hline