我正在尝试制作一个包含 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%,我不确定您希望它的行为是什么?