子表在长表中未正确垂直居中

子表在长表中未正确垂直居中

这个问题是前面几个问题的后续:长表同一行单元格垂直居中的问题在主长表的单元格中垂直居中子表

我正在使用以下代码:

\documentclass{article}
\usepackage{longtable,array,xparse,lipsum}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}

\NewDocumentCommand{\TB}{O{c} m O{c}}{%
    \begin{tabular}[#1]{@{}#3@{}}#2\end{tabular}
}

\renewcommand*{\arraystretch}{1.15}

\begin{document}
    \begin{longtable}{|L{6cm}|L{2cm}|C{2cm}|}
        \caption{Your table caption} \label{tab:my_label} \\
        \hline
        header 1  & header 2    & header 3 \\
        \hline
        \endhead
        
        \lipsum[1][1-8] & \TB{some text, \\ some text\\some text, \\ some text\\a2} & \TB{b1\\b2\\b3} \\
        \hline
    \end{longtable}
\end{document}

但是,垂直居中并未实现:

在此处输入图片描述

你能帮帮我吗?谢谢!

答案1

扩展我的评论,以下代码有效:

\documentclass{article}
\usepackage{longtable,array,xparse,lipsum}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}

\NewDocumentCommand{\TB}{O{c} m O{c}}{%
  \begin{tabular}[#1]{@{}#3@{}}#2\end{tabular}}

\renewcommand*{\arraystretch}{1.15}


\begin{document}
\begin{longtable}{|L{6cm}|L{2cm}|C{2cm}|}
  \caption{Your table caption} \label{tab:my_label} \\
  \hline
  header 1  & header 2    & header 3 \\
  \hline
  \endhead
  
  \TB{\lipsum[1][1-8]}[p{\linewidth}]
            & \TB{some text, \\ some text\\some text, \\ some text\\a2}
            & \TB{b1\\b2\\b3} \\
  \hline
\end{longtable}
\end{document}

在此处输入图片描述

在我看来,原始代码也应该可以工作,尽管当我有时将单元格与嵌套单元tabular格混合时也会得到不正确的结果。考虑两个包制造细胞或者表格数组,这可能会让你的生活在这些场景中变得更加轻松。

至于示例,它与确定正确的基线有关,但我不想详细阐述,因为我不完全确定会发生什么。我认为上面的代码有效,因为从父单元格的角度来看,只有嵌套表格建立的中间基线,中间是由于 的效果[c]。然后,p{}将所有三个单元格相对于基线对齐,因此您获得了完美的中间对齐。

相关内容