我正在尝试将其纳入longtable
我的工作中。
我得到了我想要的所有边框,除了表格“主体”上缺少右边框。(页眉出现在每一页上,因此运行良好)
\documentclass[a4paper,12pt]{book}
\usepackage{ltablex}
\setlength{\parindent}{0pt} % never indent first line
\begin{document}
{\renewcommand{\arraystretch}{1.2}
\begin{longtable}{| c | m{5cm} | m{9.5cm} | }
\hline
& \textbf{\scshape{What you observed}} & \textbf{\scshape{Suggestions/reasons/examples}} \\
\hline
\hline
\endhead
\hline
A & \multicolumn{2}{l | }{\textbf{SC} }\\
\hline
& \textbf{1. P} \newline
\null \hspace{3mm} a\newline
\null \hspace{3mm} b\newline
\null \hspace{3mm}c\newline
\null \hspace{3mm}d\\
\hline
&\textbf{2. -}\newline
\null \hspace{3mm}a\newline
\null \hspace{3mm}b\newline
\null \hspace{3mm}c\newline
\null \hspace{3mm}d\newline
\null \hspace{3mm}e\\
\end{longtable}
\end{document}
我需要如何更改我的代码?
答案1
我想提出几点建议。
如果您想对任何元素进行编号(在您的情况下为行),请使用计数器,这样您就不必记住下一个值。
LaTeX 已经有列表,您可以通过以下方式使用和格式化标准方法或额外套餐枚举项,我在下面的代码中做到了。
在表格中使用列表的一个缺点是它们会在单元格中留下额外的空行。补救措施是将列表的代码包装在\parbox
或内。然后,无论需要什么间距都必须手动添加。这就是为什么列表前后minipage
有两个。\vsppace{...}
\documentclass[a4paper,12pt]{book}
\usepackage{ltablex}
\usepackage{array} % Adds m{...} type column
\usepackage{longtable}
\usepackage{enumitem} % More options for lists
\usepackage{newtx} % Change font for the example to have combine \scshape and \bfseries
\setlength{\parindent}{0pt} % never indent first line
\newcounter{mainlist}\renewcommand\themainlist{\arabic{mainlist}.}
\newlist{innerenum}{enumerate}{1}
\setlist[innerenum]{
nosep,
label=\alph*,
}
\begin{document}
{%
\renewcommand{\arraystretch}{1.2}
\begin{longtable}{| c| m{5cm}| m{8.5cm}|}
\hline
& \textbf{\textsc{What you observed}} & \textsc{\textbf{Suggestions/reasons/examples}} \\
\hline\hline\endhead
A & \multicolumn{2}{l|}{\textbf{SC}} \\
\hline
& \textbf{\stepcounter{mainlist}\themainlist{} P}\par
\parbox{\linewidth}{%
\vspace{0.5\baselineskip}%
\begin{innerenum}
\item
\item
\item
\item
\end{innerenum}\vspace{0.5\baselineskip}}
& \\
\hline
& \textbf{\stepcounter{mainlist}\themainlist{} -}\par
\parbox{\linewidth}{%
\vspace{0.5\baselineskip}%
\begin{innerenum}
\item
\item
\item
\item
\end{innerenum}\vspace{0.5\baselineskip}}
& \\
\hline
\end{longtable}}
\end{document}
答案2
longtable
我宁愿使用longtblr
包tabularray
。enumerate
对于第二列的列表,使用带有选项的列表似乎更好resume*=<list name>
。- 在下面的 MWE 中,我预计该表有表格标题
\documentclass[a4paper,12pt]{book}
\usepackage{newtxtext, newtxmath} % for scshape bfseries font
\usepackage{tabularray}
\UseTblrLibrary{varwidth}
\usepackage{ragged2e}
\usepackage{enumitem}
\usepackage{etoolbox}
\AtBeginEnvironment{longtblr}{%
\setlist[enumerate,1]{nosep,
leftmargin = *,
label = \textbf{\arabic*.},
after =\end{minipage},
before=\begin{minipage}[t]{\linewidth}%\RagggedRight
}
\setlist[enumerate,2]{nosep,
leftmargin=*,
label = \alph*
}
}% end of AtBeginEnvironment
\setlength{\parindent}{0pt} % never indent first line
\begin{document}
\begin{longtblr}[
caption = {Long table},
label = {tab:longtblr}
]{hlines, vlines,
colspec = {c X[j] X[2, j]},
row{1} = {font=\bfseries\scshape},
measure = vbox,
rowhead = 1
}
& What you observed
& Suggestions/reasons/examples
\\
\hline
A & \SetCell[c=2]{l} \textbf{SC} \\
& \begin{enumerate}[series=tab]
\item \textbf{P}
\begin{enumerate}
\item
\item
\item
\item
\end{enumerate}
\end{enumerate}
& \\
& \begin{enumerate}[resume*=tab]
\item \textbf{--}
\begin{enumerate}
\item
\item
\item
\item
\end{enumerate}
\end{enumerate}
& \\
\end{longtblr}
\end{document}
- 在这种情况下,如果您不喜欢在 中添加字幕
longtblr
,那么 MWE 必须是:
\documentclass[a4paper,12pt]{book}
\usepackage{lipsum}
% rest of preamble
\begin{document}
\begingroup
\DefTblrTemplate{firsthead, middlehead,lasthead}{default}{} % <---
\DefTblrTemplate{contfoot-text}{normal}{\scriptsize\textit{Continued on the next page}}
\SetTblrTemplate{contfoot-text}{normal}
\begin{longtblr}[
]{hlines, vlines,
colspec = {c X[j] X[2, j]},
row{1} = {font=\bfseries\scshape},
measure = vbox,
rowhead = 1
}
% rest of table
\end{longtblr}
\endgroup
\end{document}