使用 tabularx 实现多线和宽度的水平和垂直居中(同时)

使用 tabularx 实现多线和宽度的水平和垂直居中(同时)

编辑:(部分解决方案由这个问题该链接在评论中,我稍微修改了代码;有关剩余的具体问题,请参阅底部的编辑)

我正在尝试为同事重现 csv 文件的特定布局。我已经这样做了,但我不得不做一些非常糟糕的事情才能在表格上正确设置间距。问题是我需要(或多或少)特定宽度的单元格,这将迫使其中一些单元格成为多条(垂直)线,并且需要一些跨越多列的标题。因此,随后单元格的内容理想情况下应该位于(非合并的)列/行交叉点的中心......但我似乎无法让它正常工作,除非使用一些真正可怕的\hspace*命令来最终强制间距。下面是我的 MWE,它或多或少是我想要的输出(水平间距在数字上仍然不太正确,但我无法使它变得更好,而且老实说它已经足够接近了)但必须有一个好的方法来实现这一点,即使用 \centering 和/或 and \tabularxcolumn/或\newcolumntype命令。不幸的是,经过几个小时的摆弄和阅读文档后,我似乎无法弄清楚如何让它工作;我似乎不理解这些命令的语法,因为每当我更改任何内容时,我得到的都是错误。(旁注:最初我使用 T 作为文本列,并希望它的宽度是 S 列的两倍,S 列将包含数字。后来我放弃了这种尝试,因为我无法弄清楚语法,但命令仍然存在)。

因此,重申一下,输出结果其实还不错(居中方面的任何改进都很棒,但这不是我真正的问题),但我在代码中实现它的方式确实很糟糕,我知道一定有一个很好的方法来完成它。Google 和 tabularx 文档让我失望了(或者更准确地说,我失败了),所以我一定错过了一些明显的语法应该如何工作的部分,因为如果我试图弄乱它,我得到的只是错误。

梅威瑟:

\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{tabularx}
\usepackage{amssymb}

\renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{T}{X}
\newcolumntype{S}{>{\centering\arraybackslash\hsize=.5\hsize}X}%

\begin{document}
\begin{center}
\Large \textbf{Teaching Assistant Classroom Observation Sheet}
\end{center}

\begin{tabularx}{\textwidth}{XXX}
Teaching Assistant: &&Course: \\
Evaluator: &&Date:
\end{tabularx}

\section{Preparation}
\begin{tabularx}{\textwidth}{| T | c | S S |S| S S |}\hline
Question & Not Observed & \multicolumn{2}{c |}{More Emphasis Needed} & &\multicolumn{2}{c |}{Fully Accomplished}\\ \hline
TA is well-prepared and able to work homework problems&& \hspace*{0.50cm}1\hspace*{0.50cm}& \hspace*{0.30cm}2\hspace*{0.30cm}& \hspace*{0.30cm}3\hspace*{0.30cm}& \hspace*{0.50cm}4\hspace*{0.50cm}& \hspace*{0.30cm}5\hspace*{0.30cm}\\ \hline
Knows material in text and lectures&& 1& 2& 3& 4& 5\\ \hline
Problem solving techniques are consistent with lecturer and text&& 1& 2& 3& 4& 5\\\hline
Promptly returns graded assignments&& 1& 2& 3& 4& 5\\ \hline
\end{tabularx}
\end{document}

PS:我尝试搜索类似的主题,但似乎只找到要求执行垂直或者水平居中,我发现尝试过的几个都不能正确处理多行文本块...而且由于我无法理解语法,我似乎无法修复我在那些线程中找到的示例以适合我。

编辑我已将MWE 中的newcolumntype和行编辑为以下内容:\tabularxcolumn

\renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{T}{X}
\newcolumntype{S}{>{\centering\arraybackslash\hsize=.5\hsize}X}%

现在我遇到的问题是该\multicolumn命令与列类型不能很好地兼容X,导致 \hline 命令出现一些尴尬的悬垂。我想找到一种方法让右侧看起来更美观一些。

答案1

你的问题实际上是重复的这个问题,但是由于您的表格代码中存在其他问题,我将提出一些改进(参见代码,主要更改以 表示% <---):

\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage{cellspace, tabularx}      % <---
\setlength\cellspacetoplimit{4pt}     % <---
\setlength\cellspacebottomlimit{4pt}  % <---

\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\addparagraphcolumntypes{C}          % <---
\newcommand\mcx[1]{\multicolumn{2}{>{\hsize=\dimexpr2\hsize+2\tabcolsep\centering}X|}{#1}} % <---

\begin{document}
\begin{table}[!ht]%
\setlength\tabcolsep{4pt}
\begin{tabularx}{\linewidth}{|>{\hsize=3\hsize}S{C} | c | CC | C | CC |}
    \hline
Question
    &   Not Observed
        &   \mcx{More Emphasis Needed}
                &   &   \mcx{Fully Accomplished}         \\
    \hline
TA is well-prepared and able to work homework problems
    &   & 1 & 2 & 3 & 4 & 5                                             \\
    \hline
Knows material in text and lectures
    &   & 1 & 2 & 3 & 4 & 5                                             \\
    \hline
Problem solving techniques are consistent with lecturer and text
    &   & 1 & 2 & 3 & 4 & 5                                             \\
    \hline
Promptly returns graded assignments
    &   & 1 & 2 & 3 & 4 & 5                                             \\
    \hline
\end{tabularx}
    \end{table}
\end{document}

这使

在此处输入图片描述

  • cellspace包用于向单元格的内容添加一些垂直空间。这是S向选定列添加说明符(在您的情况下,第一个是合适的)
  • 为了保留C前言中的细胞特征,添加了命令 \addparagraphcolumntypes{C}
  • 单元格宽度multicolumn使用宏\dimexpr。计算时考虑两个C单元格宽度和两个单元格高度的宽度。这样它的宽度与两个标准宽度(即单元格\tabcolsep)相同。XC
  • 表格放在浮动table环境中,以文本为中心,并且里面的设置table仅限于此表格。table您也可以使用center环境:

    \begin{center}
    \setlength\tabcolsep{4pt}
    \begin{tabularx} ....
    
    \end{tabularx}
    \end{center}
    

相关内容