我需要一个表格对齐的通用解决方案

我需要一个表格对齐的通用解决方案

我需要一个表格垂直对齐的通用解决方案。即单元格内的文本和子表格的解决方案。

我尝试定义新的列类型,例如,

\newcolumntype{?}[1]{>{\raggedright\arraybackslash}?{#1}}

但由于无法预先确定正确的单元格内内容的位置。

仅使用文本显示垂直对齐的变化

如果单元格的内容是表格,情况会更糟。垂直对齐会变得模糊和不可预测。

与单元格内的表格垂直对齐

如果在子表中使用垂直对齐(如)\begin{tabular}[t],则解决方案不完整。

在表格中使用垂直对齐

因此,我没有找到以可预测且可靠的方式垂直和水平对齐单元格中任何内容的通用解决方案。

请帮忙,我需要帮助。单元格的内容可以是文本(多行);表格;或混合在一起。

示例所用的代码如下:

\documentclass{article}
\usepackage{array}

% Middle alignment
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}
% Top alignment
\newcolumntype{T}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{U}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{V}[1]{>{\raggedleft\arraybackslash}p{#1}}
% Bottom alignment
\newcolumntype{E}[1]{>{\raggedright\arraybackslash}b{#1}}
\newcolumntype{F}[1]{>{\centering\arraybackslash}b{#1}}
\newcolumntype{G}[1]{>{\raggedleft\arraybackslash}b{#1}}

\newcommand{\subtableshort}{\begin{tabular}{ll}a&b\\c&d\end{tabular}}
\newcommand{\subtablecontrol}{\begin{tabular}{ll}a&b\\c&d\\e&f\\g&h\end{tabular}}
\newcommand{\subtableAlignedShort}[1]{\begin{tabular}[#1]{ll}a&b\\c&d\end{tabular}}
\newcommand{\subtableAlignedControl}[1]{\begin{tabular}[#1]{ll}a&b\\c&d\\e&f\\g&h\end{tabular}}

\newcommand{\txtshort}{Donec aliquet, erat ligula aliquet.\newline Suspendisse ut. }
\newcommand{\txtcontrol}{Nam dui ligula, fringilla euismod. \newline Morbi ac orci et nisl hendrerit mollis. Cras ante.}

\newcommand{\textExample}{\hline\txtcontrol&\txtshort&\txtshort&\txtshort\\[0.3in]\hline}
\newcommand{\tableExample}{\hline\subtablecontrol&\subtableshort&\subtableshort&\subtableshort\\\hline}
\newcommand{\alignedTableExample}[1]{\hline\subtableAlignedControl{#1}&\subtableAlignedShort{#1}&\subtableAlignedShort{#1}&\subtableAlignedShort{#1}\\\hline}

\begin{document}

\section{Example with texts}

Using
\begin{verbatim}
\newcolumntype{?}[1]{>{\raggedright\arraybackslash}?{#1}}
\end{verbatim}


\subsection{Middle}
\noindent\begin{tabular}{|L{1.2in}|L{1.2in}|C{1.2in}|R{1.2in}|}\textExample\end{tabular}
\subsection{Top   }
\noindent\begin{tabular}{|T{1.2in}|T{1.2in}|U{1.2in}|V{1.2in}|}\textExample\end{tabular}
\subsection{Bottom}
\noindent\begin{tabular}{|E{1.2in}|E{1.2in}|F{1.2in}|G{1.2in}|}\textExample\end{tabular}
\subsection{Mixed}
\noindent\begin{tabular}{|E{1.2in}|L{1.2in}|T{1.2in}|E{1.2in}|}\textExample\end{tabular}

\section{Example with subtables}
\subsection{Middle}
\noindent\begin{tabular}{|L{1.2in}|L{1.2in}|C{1.2in}|R{1.2in}|}\tableExample\end{tabular}
\subsection{Top}
\noindent\begin{tabular}{|T{1.2in}|T{1.2in}|U{1.2in}|V{1.2in}|}\tableExample\end{tabular}
\subsection{Bottom}
\noindent\begin{tabular}{|E{1.2in}|E{1.2in}|F{1.2in}|G{1.2in}|}\tableExample\end{tabular}

\section{Example with aligned top subtables}
\subsection{Middle}
\noindent\begin{tabular}{|L{1.2in}|L{1.2in}|C{1.2in}|R{1.2in}|}\alignedTableExample{t}\end{tabular}
\subsection{Top}
\noindent\begin{tabular}{|T{1.2in}|T{1.2in}|U{1.2in}|V{1.2in}|}\alignedTableExample{t}\end{tabular}
\subsection{Bottom}
\noindent\begin{tabular}{|E{1.2in}|E{1.2in}|F{1.2in}|G{1.2in}|}\alignedTableExample{t}\end{tabular}

\section{Example with aligned bottom subtables}
\subsection{Middle}
\noindent\begin{tabular}{|L{1.2in}|L{1.2in}|C{1.2in}|R{1.2in}|}\alignedTableExample{b}\end{tabular}
\subsection{Top}
\noindent\begin{tabular}{|T{1.2in}|T{1.2in}|U{1.2in}|V{1.2in}|}\alignedTableExample{b}\end{tabular}
\subsection{Bottom}
\noindent\begin{tabular}{|E{1.2in}|E{1.2in}|F{1.2in}|G{1.2in}|}\alignedTableExample{b}\end{tabular}

\end{document}

答案1

希望这能有所帮助。请注意,表格中的m列不关心[t]或选项(并且和选项不关心列是否为 或)。[b][t][b]pb

我几乎忘了:文本的问题是[0.3in]

姆韦

\documentclass[a4paper]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{array}
\setlength\parskip{1ex}

% Middle alignment
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}
% Top alignment
\newcolumntype{T}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{U}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{V}[1]{>{\raggedleft\arraybackslash}p{#1}}
% Bottom alignment
\newcolumntype{E}[1]{>{\raggedright\arraybackslash}b{#1}}
\newcolumntype{F}[1]{>{\centering\arraybackslash}b{#1}}
\newcolumntype{G}[1]{>{\raggedleft\arraybackslash}b{#1}}
% less typing
\newcommand{\txtcontrol}{Nam dui ligula, fringilla euismod. \newline Morbi ac orci et nisl hendrerit mollis. Cras ante.}
\newcommand{\txtshort}{Donec aliquet, erat ligula aliquet. \newline Suspendisse ut. }
\newcommand\TBLC{\hline \txtcontrol & \txtshort & \txtshort &   \txtshort \\\hline}

\begin{document}

\begin{tabular}{p{3cm}p{3cm}p{3cm}p{3cm}} Left & Left &\hfil Center &\hfill Right \\ \end{tabular}\par
\begin{tabular}{|L{3cm}|L{3cm}|C{3cm}|R{3cm}|} \TBLC \end{tabular}\qquad{\huge Medium}\par 
\begin{tabular}{|T{3cm}|T{3cm}|U{3cm}|V{3cm}|} \TBLC \end{tabular}\qquad{\huge Top}\par 
\begin{tabular}{|E{3cm}|E{3cm}|F{3cm}|G{3cm}|} \TBLC \end{tabular}\qquad{\huge Bottom}\par 

%SUBTABLES
\renewcommand{\txtcontrol}{\begin{tabular}{ll} 11 & 12\\ 21 & 22\\ 31 & 32\\ 41 & 42\\\end{tabular}}
\renewcommand{\txtshort}{\begin{tabular}{ll} 11 & 12\\ 21 & 22\\\end{tabular}}

\begin{tabular}{|L{3cm}|L{3cm}|C{3cm}|R{3cm}|} \TBLC \end{tabular}\qquad{\huge Medium}\par 

\renewcommand{\txtcontrol}{\begin{tabular}[t]{ll}11 & 12\\ 21 & 22\\ 31 & 32\\ 41 & 42\\\end{tabular}}
\renewcommand{\txtshort}{\begin{tabular}[t]{ll}11 & 12\\ 21 & 22\\\end{tabular}}

\begin{tabular}{|T{3cm}|T{3cm}|U{3cm}|V{3cm}|} \TBLC \end{tabular}\qquad{\huge Top}\par 
\begin{tabular}{|L{3cm}|L{3cm}|C{3cm}|R{3cm}|} \TBLC \end{tabular}\qquad{\huge Medium [t]}\par 

\renewcommand{\txtcontrol}{\begin{tabular}[b]{ll} 11 & 12\\ 21 & 22\\ 31 & 32\\ 41 & 42\\\end{tabular}}
\renewcommand{\txtshort}{\begin{tabular}[b]{ll} 11 & 12\\ 21 & 22\\\end{tabular}}

\begin{tabular}{|E{3cm}|E{3cm}|F{3cm}|G{3cm}|} \TBLC\end{tabular}\qquad{\huge Bottom}\par 
\begin{tabular}{|L{3cm}|L{3cm}|C{3cm}|R{3cm}|} \TBLC \end{tabular}\qquad{\huge Medium [b]}\par 

\end{document}

相关内容