表格列和行延伸至页面高度

表格列和行延伸至页面高度

我有一张用垂直线分割页面的表格。我希望表格的总高度与页面的高度相同,特别是让中心的垂直线从中线延伸到页面底部。

以下是示例代码:

\documentclass[oneside,12pt]{memoir}

\begin{document}

\begin{tabularx}{\stockwidth}{X|c}

    \multicolumn{2}{c}{A: Main heading - variable height} \\ \midrule%
    X: (This side blank) & \textbf{B: Mid heading} \\ %
    \cline{2-2} \\ [1ex]% 
    & C: Mid Content (may be any height) \\ [1ex] \cline{2-2} \\%
    & \parbox{5cm}{D: This content may be short or long, but in any %
      case the line on the left % 
      should go to the bottom of the page.}

\end{tabularx}

\end{document}

它看起来像这样(我希望中间的垂直线延伸到页面的底部):

tabularx 未延伸至页面高度的示例

我想使用\vfil或类似的东西来扩展D到页面的高度,但我不知道如何使用它。这似乎解决了主要问题。

以下是一些奇怪的限制:

  • A可以是任意高度。它从页面顶部 1 厘米处开始,距页边距 1 厘米,底部有 1 厘米的页边距。

  • C可以是任意高度,最高可达 5 厘米(但只有在必要时才可以扩展到该尺寸)。

  • D可能是两个或三个固定尺寸之一(例如 3cm、6cm 或 9cm)

  • X是页面宽度减去 D 的宽度,但在任何情况下不小于页面宽度的 50%(即,如果 D 大于页面的 50%,则 D 必须换行或类似操作)。

  • 这一切都在textblock*(来自textpos)内,该 (来自 )已rotated旋转 90 度(即,在纵向文档中的横向页面上),并且大小调整为\stockwidth - 2cm;我没有复制它以尝试保持简单。

如何将垂直线延伸至区域底部(在本例中为文本块)?

谢谢阅读。

答案1

以下是使用以下组合的尝试geometry(出于布局目的)和multicol

将内容放入multicols环境中后,您可以毫无问题地调整长度,因为文本会根据需要扩展。在最小示例中(如下所示),下图仅显示最后 2 页。

在此处输入图片描述

\documentclass[oneside,12pt]{memoir}% http://ctan.org/pkg/memoir
\usepackage{geometry}% http://ctan.org/pkg/geometry
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{multicol}% http://ctan.org/pkg/multicol
\usepackage{pdflscape}% http://ctan.org/pkg/pdflscape
\begin{document}
\lipsum[1-10]% Prior stuff in your document

\newgeometry{margin=1cm,includeheadfoot}% Page break and modify layout
\begin{landscape}
  \setlength{\columnseprule}{0.4pt}%
  \noindent\centerline{A: Main heading - variable height} \par
  \hrulefill

  \begin{multicols}{2}
    \null\columnbreak
    \noindent\centerline{\textbf{B: Mid heading}} \par
    \noindent\hskip-.5\columnsep\hrulefill

    C: Mid Content (may be any height). C~can be any height
    up to around \verb!5cm! (but it should only expand to that size if necessary.

    \noindent\hskip-.5\columnsep\hrulefill

    \centering
    \parbox{6cm}{%
      D: This content may be short or long, but in any case the line on the left 
      should go to the bottom of the page.
    }

    \rule{0pt}{\textheight}
  \end{multicols}
\end{landscape}
\end{document}

\null“欺骗” TeX 认为第一列中有内容,之后发出\columnbreak,将该列留空。或者,您可以根据需要在此列中放入任何内容。第二列的规则已移动以与 提供的0.5\columnsep垂直线对齐,使其看起来像表格。\columnseprulemulticol

最后使用\rule{0pt}{\textheight}(不可见/零宽度规则)可确保第二列一直延伸到文本块的末尾,而不会因包含landscape环境而产生错误/警告。

lipsum提供虚拟文本,同时pdflscape允许将纵向页面适当旋转为横向页面。

答案2

根据 Werner 的回答,我做了以下事情:

\documentclass[oneside,12pt]{memoir}

\usepackage{pdflscape}
\usepackage{geometry}% http://ctan.org/pkg/geometry

\begin{document}
\newgeometry{margin=1cm,includeheadfoot}% Page break and modify layout
\begin{landscape}

\noindent
\begin{tabularx}{\linewidth}{X|c}

    \multicolumn{2}{c}{
    \parbox[l][2cm][l]{2cm par box height}
    } \\ \midrule%
    X: (This side blank) & \textbf{B: Mid heading} \\ %
    \cline{2-2} \\ [1ex]% 
    & C: Mid Content (may be any height) \\ [1ex] \cline{2-2} \\%
    & \parbox[l][.60\textheight][l]{6cm}{D: This content may be short or long, but in any %
      case the line on the left % 
      should go to the bottom of the page.}

\end{tabularx}
\end{landscape}
\end{document}

目前,这对于这个答案来说已经足够好了。:) 一个有用的技巧是\parbox[l][.60\textheight][l]{6cm},将单元格的高度扩展为.6\textheight,这应该适用于我的 99.9% 的用例(当A较短时足够高,但当相当高时不会换到新页面A)。

相关内容