编辑:(部分解决方案由这个问题该链接在评论中,我稍微修改了代码;有关剩余的具体问题,请参阅底部的编辑)
我正在尝试为同事重现 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
)相同。X
C
表格放在浮动
table
环境中,以文本为中心,并且里面的设置table
仅限于此表格。table
您也可以使用center
环境:\begin{center} \setlength\tabcolsep{4pt} \begin{tabularx} .... \end{tabularx} \end{center}