如何使(嵌套的)tabularx 和 multirow 很好地协同工作?

如何使(嵌套的)tabularx 和 multirow 很好地协同工作?

我正在尝试制作一个包含 3 个独立列的布局。以下答案这个问题我尝试使用 tabularx 和 multirow 来使其工作。我似乎快到了:

页面布局

但是我有两个问题:

1) 如何使第 3 列(最右边)的文本从与图形顶部相同的级别开始? 如果我必须使用 fixnum 手动执行此操作,是否有方法计算所需的值?

2)为什么第三列的文本似乎不符合多行?(以及为什么会有一条白线)

另外两个问题是:

  • 在第一列中,为什么“项目 1”和“项目 2”没有对齐,而“项目 3”却对齐了?我该如何修复?

  • 图形的左边缘与第 1 列的左边缘不对齐 - 有办法吗?

这是我的最小示例:

%% LyX 2.0.3 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[oneside,english,oldfontcommands,a4paper]{memoir}
\usepackage{fontspec}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=1cm,rmargin=1cm}
\pagestyle{myheadings}
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}

\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.

\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{colortbl}
\definecolor{grey}{HTML}{F4F4F4}
\setheadfoot{3cm }{ 0.1cm }
\usepackage{multirow}
\usepackage{lipsum}

\makeatother

\usepackage{babel}
\begin{document}
\renewcommand{\tabularxcolumn}[1]{p{#1}}

\noindent\begin{tabularx}{\linewidth}{@{}>{\hsize=1.5\hsize}X|>{\hsize=0.5\hsize\columncolor{grey}}X@{}}
\rule{1.5\linewidth}{0.15\textheight} 
&
 \multirow{3}{0.5\linewidth}{\lipsum[1]} \tabularnewline  \tabularnewline


 {\noindent\begin{tabularx}{1.5\linewidth}{@{}>{\hsize=0.5\hsize\footnotesize\raggedleft\arraybackslash\columncolor{grey}}X|>{\hsize=1.5\hsize}X@{}}
Item 1 \newline Item 2 \newline Item 3 & \lipsum[1-3]   \end{tabularx}}
& 
\tabularnewline 

\rule{1.5\linewidth}{0.15\textheight}
&
\tabularnewline 
 \end{tabularx} 

\clearpage
\end{document}

好的,下面是 @DavidCarlisle 的评论。这是一个更简单的例子。我已将外部 tabularx 中最右边的列设置为 p{0.2\linewidth}。这意味着规则和内部 tabularx 的宽度为 \linewidth。我还从外部 tabularx 中删除了 \columncolor{grey},因为灰色填充似乎打印在文本顶部。因此,仍然存在的问题是 1) 将 tabularx 右列中的文本与规则的顶部对齐,以及 2) 将规则的左边缘与内部 tabularx 的左列对齐。修订后的 MWE:

%% LyX 2.0.3 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[10pt,oneside,english,oldfontcommands,a4paper]{memoir}
\usepackage{fontspec}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=1cm,rmargin=1cm}
\pagestyle{myheadings}
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}

\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.

\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{colortbl}
\definecolor{grey}{HTML}{F4F4F4}
\setheadfoot{3cm }{ 0.1cm }
\usepackage{multirow}
\usepackage{lipsum}

\makeatother

\usepackage{babel}
\begin{document}
\renewcommand{\tabularxcolumn}[1]{p{#1}}

\noindent\begin{tabularx}{\linewidth}{@{}X|p{0.2\linewidth}@{}} \rule{\linewidth}{0.15\textheight}  &  \multirow{3}{\linewidth}{\lipsum[1]} \tabularnewline  \tabularnewline
 {\noindent\begin{tabularx}{\linewidth}{@{}>{\hsize=0.5\hsize\footnotesize\raggedleft\arraybackslash\columncolor{grey}}X|>{\hsize=1.5\hsize}X@{}} Item 1 \linebreak Item 2 \linebreak Item 3 \linebreak & \lipsum[1-3]   \end{tabularx}} &  \tabularnewline 
\rule{\linewidth}{0.15\textheight} & \tabularnewline   \end{tabularx} 
\clearpage \end{document} 

\clearpage 
\end{document}

这给了我: 修改布局

好的。我可以通过以下方式将规则与列的边缘对齐:\hspace{-\tabcolsep}\rule{\linewidth+\tabcolsep}{0.15\textheight}

因此,现在剩下的问题是将文本与规则的顶部对齐。

答案1

默认情况下,规则或图形的基线位于底部,你可以在它之前放置一些内容,例如,\null使文本与规则上方的空框对齐,尽管这可能会使它看起来太高,因为基线然后文本的顶部与规则的顶部对齐。您可能更喜欢使用来\raisebox提供图形深度,而不是高度,您可以使用\height等来引用原始尺寸。(我相信adjustbox包简化了其中的一些。

与表格无关,但\newline不能\raggedleft正常使用,\\但您已将其重置回表格版本,因此您可以使用\linebreak

您正在指定\rule{1.5\linewidth},即指定一个不适合的规则,因为它太大了 50%,我不确定您希望它的行为是什么?

相关内容