我有一张两列的表格。第一列包含(例如)姓名和职位,第二列包含大量文本。我希望姓名和职位保持接近但在不同的行上。为此,我将它们输入到不同的行中。但是,当我multirow
在第二列使用时,一行中的文本开始与后续行中的文本重叠。我怎样才能避免不同行中的文本重叠?以下代码显示了我一直在尝试的一些方法。我试图获取格式化为第二页(最后 2-3 行)的内容,但想避免文本重叠。
\documentclass[oneside]{memoir}
% \usepackage[cm]{fullpage}
% \usepackage{showframe}
% showframe does not show proper frame
\usepackage[margin=0.5in, showframe]{geometry}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{calc}
\usepackage{multirow}
\begin{document}
\newlength{\tablecolwidth}
\setlength{\tablecolwidth}{0.6\textwidth-2\tabcolsep}
\begin{longtable}{@{}lp{\tablecolwidth}@{}}
\caption{Contents}\\
\textbf{Col 1} & \textbf{Col 2} \\
\midrule[0.25ex]
\endfirsthead
\multicolumn{2}{c}{\tablename\ \thetable{}: continued}\\[1ex]
\textbf{Col 1} & \textbf{Col 2} \\
\midrule[0.25ex]
\endhead
\midrule
\multicolumn{2}{r}{Continued \ldots}\\
\endfoot
\bottomrule[0.25ex]
\endlastfoot
Name & \lipsum[2] \\
Designation & \lipsum[1] \\
\midrule
% Contents overflow on right
Name & \multirow{2}{*}{\lipsum[2]} \\
Designation \\
& \lipsum[1] \\
\midrule
% Contents of next row overlap subsequent rows and over flow page boundary
Name & \multirow{2}{\tablecolwidth}{\lipsum[1-2]} \\
Designation \\
& \lipsum[1] \\
\midrule
% Another way of limiting column width but overlap remains
Name & \multirow{2}{*}{\parbox{\tablecolwidth}{\lipsum[2]}} \\
Designation \\
& \lipsum[1] \\
\end{longtable}
\end{document}
另外,当我使用fullpage
和时showframe
,我得到了错误的框架。我能够使用geometry
包修复它,但仍然想知道错误框架的原因是什么?
编辑,我可以通过这种方式获得正确的格式,
Name & \multirow{1}{*}{\parbox{\tablecolwidth}{\lipsum[2]}} \\
Designation \\ \\ \\ \\ \\ \\ \\
& \lipsum[1] \
然而我仍在尝试寻找更好的方法来做到这一点。
答案1
边距,showframe
包fullpage
不支持memoir
。该类memoir
比标准类在页面布局方面更复杂。它提供了额外的长度\stockwidth
,\stockheight
以及其他内容,例如裁切标记,...
软件包 不支持附加长度\spinemargin
、\foremargin
、\uppermargin
。设置新边距后,这些长度的值不正确。但软件包/支持并使用其中部分长度。\lowermargin
geometry
showframe
eso-pic
memoir
可以手动修复它们:
\usepackage[margin=0.5in]{geometry}
\spinemargin=\dimexpr\oddsidemargin+1in\relax
\foremargin=\dimexpr\evensidemargin+1in\relax
\uppermargin=\dimexpr\topmargin+1in+\headheight+\headsep\relax
\checkandfixthelayout
\usepackage{showframe}
但是我不建议使用geometry
with memoir
,因为该类有自己的设置页面布局的方法,例如:
\setlrmarginsandblock{.5in}{.5in}{*}
\setulmarginsandblock{.5in}{.5in}{*}
\checkandfixthelayout
\usepackage{showframe}
表格
也许你只是想要有两p
列,但不需要指定第一列的宽度?那么你可以tabular
在里面使用longtable
将两个条目放在第一列的两行中:
\documentclass[oneside]{memoir}
\setlrmarginsandblock{.5in}{.5in}{*}
\setulmarginsandblock{.5in}{.5in}{*}
\checkandfixthelayout
\usepackage{showframe}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{calc}
\newcommand*{\namedes}[2]{%
\begin{tabular}[t]{@{}l@{}}%
#1\tabularnewline
#2%
\end{tabular}%
}
\begin{document}
\newlength{\tablecolwidth}
\setlength{\tablecolwidth}{0.6\textwidth-2\tabcolsep}
\begin{longtable}{@{}lp{\tablecolwidth}@{}}
\caption{Contents}\\
\textbf{Col 1} & \textbf{Col 2} \\
\midrule[0.25ex]
\endfirsthead
\multicolumn{2}{c}{\tablename\ \thetable{}: continued}\\[1ex]
\textbf{Col 1} & \textbf{Col 2} \\
\midrule[0.25ex]
\endhead
\multicolumn{2}{r}{Continued \ldots}\\
\endfoot
\bottomrule[0.25ex]
\endlastfoot
\namedes{Name}{Designation} & \lipsum[2] \lipsum*[1]\\
\midrule
\namedes{Name}{Designation} & \lipsum[2] \lipsum*[1]\\
\end{longtable}
\end{document}