我正在尝试模拟带有嵌套枚举列表的表格。从我的阅读来看,使用表格是不可能的 - 让我们假设这是真的。我正在从 javascript 生成 latex。
我想要做的是:将右侧的第一项与左侧相应项的顶行对齐
这是我目前拥有的:
这就是我想要的:
这是我正在使用的乳胶(仅生成一个“行”):
\documentclass[14pt, letterpaper]{article}
\usepackage{fancyhdr}
\usepackage[head=41.68335pt]{geometry}
\usepackage{enumitem}
\usepackage{indentfirst}
\begin{document}
\pagebreak\textbf{Part One - General}
\begin{enumerate}
[leftmargin=*,topsep=0pt,itemsep=0pt,label={1.\arabic*}]
\begin{tabular}{p{0.3\textwidth}}
\item\flushleft\textbf{SECTION INCLUDES}
\end{tabular}
\begin{enumerate}
[align=left, leftmargin=180pt, labelwidth=30pt,label={.\arabic*}]
\item Work covered by Contract documents
\item Contract Method
\end{enumerate}
\end{enumerate}
\end{document}
我知道如何将线条向上移动一定量(\vspace{20pt}
将其向上移动一行),但我需要将其向上移动\vspace{20pt} * lines_in_header
有人对如何做到这一点有什么见解吗?
编辑 minipage/table 溢出丑陋:(正如你所看到的,我设置了 \textheight=5cm...查找页码)
答案1
将其放置enumerate
在minipage
环境中即可解决问题
\noindent
\textbf{Part One - General}
\begin{enumerate}[leftmargin=*,topsep=1ex,itemsep=4ex,label={1.\arabic*}]
\item
\begin{minipage}[t]{\dimexpr0.30\textwidth\relax}
\raggedright
\textbf{SECTION INCLUDES}
\end{minipage}\hspace*{\fill}%'
\begin{minipage}[t]{\dimexpr0.70\textwidth-2em\relax}
\begin{enumerate}[align=left, label={.\arabic*}]
\item Work covered by Contract documents
\item Contract Method
\end{enumerate}
\end{minipage}
\item
\begin{minipage}[t]{\dimexpr0.30\textwidth\relax}
\raggedright
\textbf{THIS IS A LONGER TITLE}
\end{minipage}\hspace*{\fill}%'
\begin{minipage}[t]{\dimexpr0.70\textwidth-2em\relax}
\begin{enumerate}[align=left, label={.\arabic*}]
\item Work covered by Contract documents
\item Contract Method
\end{enumerate}
\end{minipage}
\end{enumerate}
我不确定你为什么要使用这个tabular
环境。
您提到您尝试使用minipage
。请务必传递可选参数[t]
以使minipage
将其第一行的基线与其所在文本的基线对齐。
更新:一个更好的解决方案
以下并非什么 hack 行为:
\documentclass{article}
\usepackage{fancyhdr}
\usepackage[head=41.68335pt]{geometry}
\usepackage{enumitem}
\usepackage{indentfirst}
\pagestyle{empty}
%% I use a box for your "title" and save its width in "\mytitlewidth"
\newlength{\mytitlewidth}
\newlength{\mytopsep}
\newsavebox{\mytitlebox}
%% and environment to handle your list
\newenvironment{enumwithinenum}[1]
{\setlength{\mytitlewidth}{\dimexpr0.30\textwidth\relax}%%'
\setlength{\mytopsep}{2ex}%%'
%% save the title in a box so we can access its height later to
%% use to adjust where the next enumerate begins.
\begin{lrbox}{\mytitlebox}%%'
\begin{minipage}[t]{\dimexpr\mytitlewidth\relax}
\raggedright\strut
\textbf{#1}
\par\xdef\tpd{\the\prevdepth}%%'
\end{minipage}%%'
\end{lrbox}%%"
\usebox{\mytitlebox}%%'
\vspace{-\dimexpr\dp\mytitlebox+\parskip+0.7\baselineskip+\mytopsep\relax}%%'
\begin{enumerate}[align=left,
label={.\arabic*},
leftmargin=\dimexpr\mytitlewidth+2em\relax,
topsep=\mytopsep,
]
}
{\end{enumerate}}
%-@-(1)---------------------------------------------------------------------
\begin{document}
\noindent
\textbf{Part One - General}
\begin{enumerate}[leftmargin=*,topsep=1ex,itemsep=4ex,label={1.\arabic*}]
\item \begin{enumwithinenum}{SECTION INCLUDES}
\item \strut Work covered by Contract documents
\item Contract Method
\item Contract Method
\item Contract Method
\item Contract Method
\item Contract Method
\item Contract Method
\item Contract Method
\item Contract Meth
\end{enumwithinenum}
\item \begin{enumwithinenum}{THIS IS A LONGER TITLE}
\item \strut Work covered by Contract documents
\item Contract Method
\end{enumwithinenum}
\end{enumerate}
\end{document}
这样效果会好得多。原则上只有一个环境时,无需担心多个环境。我认为您必须注意的一件事是,在使用此解决方案时将一个放在\strut
第一个上\item
。此外,如果枚举的第一行上有任何异常高的对象,那么这些对象将不会按您需要的方式排列:但对于大多数类型的文本来说,这应该不是问题。