如何防止过长的单元格条目滑落/保持它们垂直居中?

如何防止过长的单元格条目滑落/保持它们垂直居中?

基本问题:在此表格中,单元格条目需要放在一条水平线上。这不适用于较大的条目(“(x)”而不是“x”),即使选择较小的字母大小也是如此。我如何垂直调整它们?

\documentclass[a4paper]{article}

% Based on the class scrreprt by "KOMA-Script", whatever that means. If that doesn't help, please try \documentclass{scrreprt} or one of the usual.
\usepackage[T1]{fontenc}


\usepackage[ngerman]{babel}
\usepackage{rotating}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{array}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{x}{>{\raggedright\arraybackslash\hspace{0pt}}X}

\begin{document}

\begin{table}[htb]
\centering
\renewcommand{\arraystretch}{1.5}

\begin{tabularx}{\textwidth}{|p{0.11\textwidth}|p{0.165\textwidth}|*{16}{X|}}
\hline
Kategorie &
Ausprägung &
\begin{sideways}Bie \end{sideways} &
\begin{sideways}Übe / Rei\hspace{1em} \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Bev \end{sideways} &
\begin{sideways}War \end{sideways} &
\begin{sideways}Gle \end{sideways} &
\begin{sideways}Bes \end{sideways} &
\begin{sideways}Hot \end{sideways} &
\begin{sideways}Fre \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Ord \end{sideways} &
\begin{sideways}Fin \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Bee \end{sideways} &
\begin{sideways}Bee \end{sideways}\\
\hline
\end{tabularx}

\begin{tabularx}{\textwidth}{|P{.11\textwidth}|P{.165\textwidth}|*{16}{x|}}
\hline
\multirow{ 3}{*}{\parbox[t]{.11\textwidth}{Betroffener Reiseabschnitt}} & Dieser & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ &&&&&&&&&&&\\
& Jener &&&&& $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & {\scriptsize $(\times)$} &\\
& Ein gänzlich verschiedener &&&&&&&&&&&&&& $\times$ & $\times$ & $\times$ \\
\hline
\end{tabularx}

\begin{tabularx}{\textwidth}{|P{.11\textwidth}|P{.165\textwidth}|*{16}{m{.0453125\textwidth}|}}
\hline
\multirow{ 3}{*}{\parbox[t]{.11\textwidth}{Betroffener Reiseabschnitt}} & Dieser & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ &&&&&&&&&&&\\
& Jener &&&&& $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & {\scriptsize $(\times)$} &\\
& Ein gänzlich verschiedener &&&&&&&&&&&&&& $\times$ & $\times$ & $\times$ \\
\hline
\end{tabularx}

\end{table}

\end{document}

相关问题:在搜索答案时,我刚发现使用列的建议m。因此,是否可以使用 \renewcommand\tabularxcolumn[1]{m{#1}}\renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}} 仅适用于第二种tabularx情况?之后可以关闭效果吗?

附加问题:尝试使用m不带 的列\renewcommand失败了,因为我对第三个 的算术不正确tabularx。为什么不是0.11\textwidth + 0.165\textwidth + 16*0.0453125\textwidth= \textwidth?(对 0.12 + 0.18 + 16*0.04375 也不起作用。)

问题形象

答案1

下一行出现的原因(x)是,您在文本前添加了一个断点,\hspace{0pt}并且(x)太宽,无法适合指定的列宽,如果您更改为

\newcolumntype{P}[1]{p{#1}}
\newcolumntype{x}{X}

然后它会出现在一行上,尽管它仍然太宽而无法容纳,除非您使用较小的字体或使用其他方法来缩小表格。

在此处输入图片描述

\documentclass[a4paper]{article}

% Based on the class scrreprt by "KOMA-Script", whatever that means. If that doesn't help, please try \documentclass{scrreprt} or one of the usual.
\usepackage[T1]{fontenc}

\usepackage[ngerman]{babel}
\usepackage{rotating}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{array}

\newcolumntype{P}[1]{p{#1}}
\newcolumntype{x}{X}

\begin{document}

\begin{table}[htb]
\centering
\renewcommand{\arraystretch}{1.5}

\begin{tabularx}{\textwidth}{|p{0.11\textwidth}|p{0.165\textwidth}|*{16}{X|}}
\hline
Kategorie &
Ausprägung &
\begin{sideways}Bie \end{sideways} &
\begin{sideways}Übe / Rei\hspace{1em} \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Bev \end{sideways} &
\begin{sideways}War \end{sideways} &
\begin{sideways}Gle \end{sideways} &
\begin{sideways}Bes \end{sideways} &
\begin{sideways}Hot \end{sideways} &
\begin{sideways}Fre \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Ord \end{sideways} &
\begin{sideways}Fin \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Bee \end{sideways} &
\begin{sideways}Bee \end{sideways}\\
\hline
\end{tabularx}

\begin{tabularx}{\textwidth}{|P{.11\textwidth}|P{.165\textwidth}|*{16}{x|}}
\hline
\multirow{ 3}{*}{\parbox[t]{.11\textwidth}{Betroffener Reiseabschnitt}} & >Dieser & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ &&&&&&&&&&&\\
& Jener &&&&& $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & >$\times$ & $\times$ & $\times$ & $\times$ & $\times$ & {\scriptsize >$(\times)$} &\\
& Ein gänzlich verschiedener &&&&&&&&&&&&&& $\times$ & $\times$ & $\times$ >\\
\hline
\end{tabularx}

\begin{tabularx}{\textwidth}{|P{.11\textwidth}|P{.165\textwidth}|*{16}{m{.0453125\textwidth}|}}
\hline
\multirow{ 3}{*}{\parbox[t]{.11\textwidth}{Betroffener Reiseabschnitt}} & >Dieser & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ &&&&&&&&&&&\\
& Jener &&&&& $\times$ & $\times$ & $\times$ & $\times$ & $\times$ & >$\times$ & $\times$ & $\times$ & $\times$ & $\times$ & {\scriptsize >$(\times)$} &\\
& Ein gänzlich verschiedener &&&&&&&&&&&&&& $\times$ & $\times$ & $\times$ >\\
\hline
\end{tabularx}

\end{table}

\end{document}

答案2

David Carlisle 的回答很好地解释了您的问题的原因。从这个解释可以看出,您的表格太宽,无法容纳文本宽度,因为它是article文档类中默认定义的。作为解决方案,您有以下可能性:

  • 旋转桌子sidewaystable
  • 使用geometry包增加整个文档的文本宽度
  • 仅为表格增加文本宽度,例如使用adjustwidth包中的宏changepage并允许表格突出文档文本边框

对于第二种情况,我选择边距大小为 20mm,并将更宽的文本放入>$(\times)$设置为零的multicolumn环境中tabcolsep。这样我得到了以下结果:

在此处输入图片描述

使用代码:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}% <-- added

\usepackage[ngerman]{babel}
\usepackage{rotating}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{array}
\usepackage[margin=20mm]{geometry}% <-- added

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}    
\newcommand\mc[1]{\multicolumn{1}{@{}c@{}|}{\footnotesize #1}}% <-- added

\usepackage{showframe}% <-- added for showing page layout
\renewcommand*\ShowFrameColor{\color{green}}% <-- customization of showframe

\begin{document}
    \begin{table}[htb]
    \centering
    \renewcommand{\arraystretch}{1.5}   
\begin{tabularx}{\textwidth}{|P{0.11\textwidth}|P{0.125\textwidth}|% <-- changed
                              *{16}{X|}}
\hline
Kategorie   &   Ausprägung         &
\begin{sideways}Bie \end{sideways} &
\begin{sideways}Übe / Rei\hspace{1em} \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Bev \end{sideways} &
\begin{sideways}War \end{sideways} &
\begin{sideways}Gle \end{sideways} &
\begin{sideways}Bes \end{sideways} &
\begin{sideways}Hot \end{sideways} &
\begin{sideways}Fre \end{sideways} &
\begin{sideways}Zus \end{sideways} &
\begin{sideways}Ord \end{sideways} &
\begin{sideways}Fin \end{sideways} &
\begin{sideways}Uml \end{sideways} &
\begin{sideways}Bee \end{sideways} &
\begin{sideways}Bee \end{sideways}\\
\hline
%\end{tabularx}
%
%\begin{tabularx}{\textwidth}{|P{.11\textwidth}|P{.125\textwidth}|*{16}{X|}}
\hline
\multirow{ 2}*{\parbox[t]{\linewidth}{Betroffener Reiseabschnitt}} % <-- simlified
    & >Dieser & $\times$ & $\times$ & $\times$ & $\times$ & $\times$ &&&&&&&&&&&                                         \\
    & Jener   &&&&
              & $\times$  & $\times$ & $\times$ & $\times$ & $\times$ 
              & \mc{>$\times$}% <-- changed
              & $\times$ & $\times$ & $\times$ & $\times$ 
              & \mc{>$(\times)$}% <-- changed     
              &                 \\
    & Ein gänzlich verschiedener 
              &&&&&&&&&&&&&
              & $\times$  & $\times$ & \mc{$\times$>}   \\ % <-- changed
\hline
\end{tabularx}
    \end{table}
\end{document}

对于第三种情况,你需要将changepage包添加到你的序言中

\usepackage[strict]{changepage}

并将表环境的内容放入adjustwidth宏中:

\begin{adjustwidth}{<changes of left margin>{<changes of right margin>}
... table content ...
\end{adjustwidth}

必须选择文本区域左边距和右边距的变化,以便上表局部文本宽度为 210 - 20 - 20 = 170 毫米。

相关内容