两个独立表格的行底部对齐错误,其中最后一行包含一个嵌套表格

两个独立表格的行底部对齐错误,其中最后一行包含一个嵌套表格

我想创建一个页面,在页面底部的左侧和右侧放置一些信息。小页面的底线应该对齐,就像一条“光线”。在摆弄表格、嵌套表格和小页面时,我最终陷入了 LaTeX 奇怪的布局行为:

我注意到,当且仅当小页面中表格的最后一行高度为 1 行时,底线才会正确对齐。否则,它们将与底线对齐。因此,对我有帮助的(以一种黑客方式)是在两个(独立的!)表格环境中引入一个空行。

以下是一个例子:

\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{tabularx}
\usepackage{lipsum}

\begin{document}
        \begin{minipage}[b]{0.49\textwidth}
            \begin{flushleft}
                \begin{tabular}[b]{@{}ll@{}}
                    \textbf{Some Caption A} & Some value B\\
                    \textbf{Some Caption B} & Another Value C\\
                    ~ & ~
                \end{tabular}
            \end{flushleft}
        \end{minipage}
        \begin{minipage}[b]{0.49\textwidth}
            \begin{flushright}
                \begin{tabular}[b]{@{}ll@{}}
                    \textbf{Some Caption C} & B\\
                    \textbf{Some Caption D} & C\\
                    \textbf{Some Caption E} & \begin{tabular}[t]{@{}l@{}}
                            E line number 1 \\
                            E line number 2 \\
                            E line number 3
                        \end{tabular} \\
                    ~ & ~
                \end{tabular}
            \end{flushright}
        \end{minipage}
\end{document}

此代码产生预期的结果: 行正确对齐

如果我删除代码中的 ~ & ~ 行,我会得到这个: 底部行未对齐

我在这里做错了什么?我该如何避免?提前感谢您的帮助。

编辑为了避免对我的问题的要点产生进一步的混淆,我稍微改变了这个例子。

編輯 II:为了更加精确,我更改了图片并删除了一些抽象……

答案1

看来你已经发现了 TeX 和 LaTeX 的一个“特性”。请参阅Frank Mittelbach 的回答关于m-column 的类似问题。

我找到了另外两个“解决方案”,因此最终得到三个:

  1. 像你所做的那样使用空行
  2. 用一个\strut
  3. 使用\leavevmode

您的 MWE 与替代方案:

\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{tabularx}
\usepackage{lipsum}

\begin{document}
    \begin{minipage}[b]{0.49\textwidth}
        \begin{flushleft}
            \begin{tabular}[b]{@{}ll@{}}
                A & B\\
                A & My line number 0
                \leavevmode
                %\strut 
                %~ & ~
            \end{tabular}
        \end{flushleft}
    \end{minipage}
    \begin{minipage}[b]{0.49\textwidth}
        \begin{flushright}
            \begin{tabular}[b]{@{}ll@{}}
                A & B\\
                A & C\\
                A & \begin{tabular}[t]{@{}l@{}}
                        My line number 1 \\
                        My line number 2 \\
                        My line number 3
                    \end{tabular} \\
               \leavevmode
               %\strut
                % ~ & ~
            \end{tabular}
        \end{flushright}
    \end{minipage}

\end{document}

如果您编译该文档并对这三种替代方案分别进行注释,您将看到,至少在我的系统上,这三种情况下的结果是相似的。

如果我理解正确,问题在于,一个不可见的支柱“隐藏”在一个组中,那么在最后一行后面添加一个似乎\strut是最“正确”的解决方案。在我看来,你必须手动纠正​​对齐。

我不是 Texpert,所以我可能是错的。

答案2

现在,从您的代码中我的第一个想法是,您的表格的错误在于您\textwidth在单元格中使用了整数,而您应该只使用分数,但后来我发现事实并非如此。

我发现如果你不调整单元格的宽度,里面的文本就会像你看到的一样显示在很长的一行中。因此,如果你想使用带有嵌套表格的迷你页面,你必须事先计算列的宽度。

来自您的 MWE:

\documentclass{文章} \usepackage[a4paper]{几何} \usepackage{tabularx} \usepackage{lipsum}

\begin{document}    
        \begin{minipage}[t]{0.49\textwidth}
            \begin{flushleft}
                \begin{tabular}[]{@{}lp{0.245\textwidth}@{}}
                    A & B\\
                    A & \lipsum\\
                    ~ & ~
                \end{tabular}
            \end{flushleft}
        \end{minipage}    
        \begin{minipage}[b]{0.49\textwidth}
            \begin{flushright}
                \begin{tabular}[b]{@{}ll@{}}
                    A & B\\
                    A & C\\
                    A & \begin{tabular}[t]{@{}p{0.245\textwidth}@{}}
                            \lipsum[1] \\
                            \lipsum[2] \\
                            \lipsum[3]
                        \end{tabular} \\
                    ~ & ~
                \end{tabular}
            \end{flushright}
        \end{minipage}    
\end{document}

请注意,不要定义插入 y 的列,而是\lipsum使用l定义:p{length}其中长度可以用所有单位LaTeX支持的数值来表示,或者在本例中用文本宽度的分数来表示。我使用 0.245 作为示例,它给出了非常窄的列,但有效。现在您可以玩一下并根据您的需要进行调整。

答案3

你可以把 \lipsum[3] 附近的线条折断

我的代码:

\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{tabularx}
\usepackage{lipsum}
\usepackage{fix-cm}
\begin{document}
    \begin{minipage}[b]{0.4\textwidth}
        \begin{flushleft}
            \begin{tabular}[t]{@{}ll@{}}
                A & B\\
                A & \lipsum\\
                ~ & ~

            \end{tabular}
        \end{flushleft}
    \end{minipage}
    \begin{minipage}[b]{0.4\textwidth}
        \begin{flushleft}
            \begin{tabular}[b]{@{}ll@{}}
                A & B\\
                A & C\\
                A & \begin{tabular}[b]{@{}l@{}}
                        \lipsum[1] \\
                        \lipsum[2] \\
                        \lipsum[3]\\
                    \end{tabular} \\
                ~ & ~

            \end{tabular}
        \end{flushleft}
    \end{minipage}

\end{document} 我希望这是你想要的。

在此处输入图片描述

答案4

您希望将第一个小页面的两行与第二个小页面的三行对齐。逻辑是正确的。由于您选择了底部选项,因此第一个小页面的两行与第二个小页面的最后两行对齐。由于第二个小页面的第三行包含另外三行,因此这似乎是不正确的。因此,您在两个小页面中都添加了 ~&~ 作为最后一行。

如果你使用 top 选项,结果将是

在此处输入图片描述

如果您使用底部选项并且两个小页面上都没有 ~&~ 则结果将是

底部无

如果您使用底部选项并在第一个小页面上使用 ~&~ ,结果将是

空首

如果你在第二个小页面上使用底部选项 ~&~ ,结果将是

withempty2

这是不正确的

当你在两个小页面上都使用带有 ~&~ 的底部选项时

空置

虽然按照愿望排列,但并不正确。这是我的观点。

相关内容