在`longtable`中使用`multirow`时如何避免文本重叠?

在`longtable`中使用`multirow`时如何避免文本重叠?

我有一张两列的表格。第一列包含(例如)姓名和职位,第二列包含大量文本。我希望姓名和职位保持接近但在不同的行上。为此,我将它们输入到不同的行中。但是,当我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。设置新边距后,这些长度的值不正确。但软件包/支持并使用其中部分长度。\lowermargingeometryshowframeeso-picmemoir

可以手动修复它们:

\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}

但是我不建议使用geometrywith 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}

结果

相关内容