复杂的表格设置,m 列和 p 列未正确水平和垂直对齐

复杂的表格设置,m 列和 p 列未正确水平和垂直对齐

这是我的表的支架,它已经减少了所有依赖性。

\documentclass{scrbook}
\usepackage{enumitem,longtable}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{P}[1]{>{\arraybackslash}m{#1}}
\makeindex
\begin{document}
  \begin{longtable}{@{}P{4.3cm}@{}P{1cm}@{\hspace{3mm}}P{4.3cm}@{}P{1cm}@{}}
    \multicolumn{4}{@{}p{10.8cm}@{}}{\textbf{heading}}
    \\[2mm]
    \multicolumn{2}{@{}p{5.3cm}@{}}{{texts}} 
    & 
    \multicolumn{2}{@{}m{5.3cm}@{}}{{text2a}    
        \newline  
    {text2b}} 
    \\
    text3 & RL=*  
        & 
        text4a  oder 
        \newline  
        text4b  & RL=*/*
    \\
    \multicolumn{2}{@{}p{5.3cm}@{}}{text5} 
    & 
    \multicolumn{2}{@{}p{5.3cm}@{}}{
      \begin{scriptsize}
        \textbf{A: }{Text6}
       \newline
        \textbf{B: }Text7
      \end{scriptsize}
    }    
    \\ 
    \hline
  \end{longtable}
\end{document}

我无法同时完成两件事:让第一列和第三列垂直对齐,并让单行和多行水平居中对齐。我还错过了什么?

答案1

我将给出一个符合我理解的您的要求的答案:对齐列和居中行。但重要的是我如何在很短的时间内和很少的击键次数内得到答案。

1 我开始在 excel 中创建表格,包括粗体和脚本大小所需的 TeX 命令。“heading”一词不需要这些命令。

2使用 Excel2Latex 插件,我“复制并粘贴”了代码,位于您的代码下方。参见图。查看我选择的选项。

https://ctan.org/tex-archive/support/excel2latex?lang=en

我还将需要运行的软件包multirow和添加到了序言中。bigstut

3\begin{tabular}然后,我将和获得的 代码“移植”\end{tabular}到您的 longtable 环境中,并将 P 列更改为类型 C。为了清楚起见,还添加了标题。

(我忘了在最后一栏中替换{RL=*\*}为 。){RL=*\textbackslash{}*}

excel2latex

\documentclass{scrbook}
\usepackage{enumitem,longtable}
\usepackage{array}

\usepackage{bigstrut} % added
\usepackage{multirow} % added

\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{P}[1]{>{\arraybackslash}m{#1}}
\makeindex
\begin{document}
\begin{longtable}{@{}P{4.3cm}@{}P{1cm}@{\hspace{3mm}}P{4.3cm}@{}P{1cm}@{}}
 \multicolumn{4}{@{}p{10.8cm}@{}}{\textbf{heading}}
 \\[2mm]
 \multicolumn{2}{@{}p{5.3cm}@{}}{{texts}} 
 & 
 \multicolumn{2}{@{}m{5.3cm}@{}}{{text2a}    
     \newline  
 {text2b}} 
 \\
 text3 & RL=*  
     & 
     text4a  oder 
     \newline  
     text4b  & RL=*/*
 \\
 \multicolumn{2}{@{}p{5.3cm}@{}}{text5} 
 & 
 \multicolumn{2}{@{}p{5.3cm}@{}}{
   \begin{scriptsize}
     \textbf{A: }{Text6}
    \newline
     \textbf{B: }Text7
   \end{scriptsize}
 }    
 \\ 
 \hline
\end{longtable}

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
\centering
\caption{ Table generated by Excel2LaTeX}
\begin{tabular}{cccc}
    \multicolumn{4}{l}{\textbf{headings}} \bigstrut[b]\\
    \hline
    \multirow{2}[1]{*}{texts} &       & text2a &  \bigstrut[t]\\
    &       & text2b &  \\
    \multirow{2}[0]{*}{text3} & \multirow{2}[0]{*}{RL=*} & text4a oder & \multirow{2}[0]{*}{RL=*\*} \\
    &       & text4b &  \\
    \multirow{2}[1]{*}{text5} &       & {\scriptsize \textbf{A}:Text6} &  \\
    &       & {\scriptsize \textbf{B}:Text7} &  \bigstrut[b]\\
    \hline
\end{tabular}%
\label{tab:addlabel}%
\end{table}%



\begin{longtable}{@{}C{4.3cm}@{}C{1cm}@{\hspace{3mm}}C{4.3cm}@{}C{1cm}@{}}  %changed P to C type
    \caption{Transplanted to longtable plus C columns}\\  % added
    \multicolumn{4}{l}{\textbf{headings}} \bigstrut[b]\\
    \hline
    \multirow{2}[1]{*}{texts} &       & text2a &  \bigstrut[t]\\
    &       & text2b &  \\
    \multirow{2}[0]{*}{text3} & \multirow{2}[0]{*}{RL=*} & text4a oder & \multirow{2}[0]{*}{RL=*\*} \\
    &       & text4b &  \\
    \multirow{2}[1]{*}{text5} &       & {\scriptsize \textbf{A}:Text6} &  \\
    &       & {\scriptsize \textbf{B}:Text7} &  \bigstrut[b]\\
    \hline
\end{longtable}

\end{document}

输出

我之所以解释这一切,是因为我处理过很多复杂的表格、文本、一些方程式,而且大部分都是数字。有些列是从其他列计算出来的,或者链接到数据库的。所以这项工作是使用 LaTeX 以外的其他工具在很长时间内完成的。一旦表格成熟、得到同行的认可并准备好发布,LaTeX 就会作为最后一步进入现场。(唯一的例外是包含许多方程式的表格。没有什么能胜过 LaTeX)。

可重现结果的规则是“原始数据只有一个入口点”。对我来说,手动将所有内容重写为 LaTeX 代码没有任何意义,这是一项耗时且容易出错的任务。(特别是如果审阅者后来建议更改列的顺序或排序顺序!)

当我使用 Excel 作为主要工具开发工作时,我使用插件转到 LaTeX。其他统计软件包(如“R”)支持其他导出工具将数据转换为 LaTeX 代码。当然,可能需要进行一些调整以适应页面、方向等,但数据已经存在,大多数(绝非全部)格式也存在。

最后但并非最不重要的一点是,我发现该插件是一个很好的教学工具,尤其是对于复杂的格式,当我不想通过许多专用于表格的包来寻找解决方案时(或者懒得阅读手册)。尝试使用注释中提到的“umbrochen”行自己做练习。

您可以在 Excel 中设计表格:行、多列、多行、对齐、颜色等,然后​​将插件生成的代码粘贴到一个简单的 LateX 文档中,只需运行代码所需的几个包,如果可能的话,还有它的最终几何形状。响应很快,几乎就像 GUI,特别是如果您有两个屏幕。请注意,您可以使用实际数据,使用电子表格设置小数位数、字体、突出显示异常值等。

有时候,您必须进行工具无法捕捉的手动调整,例如列的绝对宽度。只有这样,您才能将结果放入实际的 LaTeX 文档中,以查看是否与其他包或宏没有冲突。

由于您将保留电子表格作为 LaTeX 代码的来源,因此任何更改(小数位数、隐藏列、重新排序和从数据库更新)都非常简单。使用文本编辑器或 LaTeX,任何这些常见任务对于数十或数百行和数据(一些是计算出来的,其他链接到其他来源)来说都是几乎不可能完成的工作。

获得回答问题结果的时间:15 分钟。撰写此答案的时间:2 小时以上。

答案2

凭借出色的nicematrix包装

在此处输入图片描述

\documentclass{article}
\usepackage{nicematrix}

\usepackage{calc}
\usepackage{booktabs}
\usepackage{xcolor}

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1\textwidth-2\tabcolsep-1.5\arrayrulewidth}}
\newcolumntype{Y}[1]{>{\centering\arraybackslash}p{#1\textwidth-2\tabcolsep-1.5\arrayrulewidth}}


\begin{document}
\newcolumntype{P}[1]{>{\raggedright\arraybackslash}m{#1\textwidth-2\tabcolsep-1.5\arrayrulewidth}}
\begin{NiceTabular}{P{0.2}P{0.2}@{\hspace{-1cm}}P{0.2}P{0.2}}[code-before = \rowcolor{red!30}{3}\cellcolor{blue!30}{1-1}]
    \textbf{heading}&&&\\
    \toprule[2pt]
    text1&&texta\newline textb&\\
    text2&RL=*&texta\newline textb&RL=*/*\\
    text3&&\scriptsize{\textbf{A:}{Text}\newline \textbf{B:}{Text}}&\\ 
    \bottomrule[2pt]
\end{NiceTabular}       
\end{document}

相关内容