![如何将我的 longtable 的长度设置为文本宽度?](https://linux22.com/image/406110/%E5%A6%82%E4%BD%95%E5%B0%86%E6%88%91%E7%9A%84%20longtable%20%E7%9A%84%E9%95%BF%E5%BA%A6%E8%AE%BE%E7%BD%AE%E4%B8%BA%E6%96%87%E6%9C%AC%E5%AE%BD%E5%BA%A6%EF%BC%9F.png)
我尝试过用几种方法来设置我的长表的宽度,但似乎都不起作用。它仍然超出了我的页面...有人能帮我吗?
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\def\setcitestyle{}
\def\citep{\cite}
\usepackage{longtable}
\begin{document}
\setlength\LTleft{0pt} % see p. 7 of longtable package user guide
\setlength\LTright{0pt}
\begin{longtable}{@{} l @{\extracolsep{\fill}} ccc @{}}
\hline
\multicolumn{1}{|c|}{\textbf{Maatregel}} & \multicolumn{1}{c|}{\textbf{Onderhoudswerkzaamheden}} & \multicolumn{1}{c|}{\textbf{Jaarlijkse kosten}} \\ \hline
\textbf{Bovengronds} & & \\ \hline
\multicolumn{1}{|l|}{Vergoenen tuinen (particulier)} & \multicolumn{1}{l|}{x} & nvt \\ \hline
\multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Openbaar groen aanleggen of groen verlagen \\ (infiltratieveld)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}- Grasmaaien (1x per 2 weken)\\ - Beluchten en verticuteren \\ (1x per jaar)\end{tabular}} & €2,15 per m2 \\ \hline
\multicolumn{1}{|l|}{WADI's} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Groendonderhoud:\\ - Grasmaaien, zwerfvuil verwijderen \\ (1x per 2 weken)\\ - Bladeren verwijderen en verticuteren \\ (1x per jaar)\\ \\ Correctief onderhoud:\\ - Opnieuw inzaaien (1x per jaar)\\ - Bodemverbetering (1x per 2 jaar)\\ - Toplaag vervangen (1x per 10 jaar)\end{tabular}} & €7,40 per m2 \\ \hline
\multicolumn{1}{|l|}{Oppervlakte water aanleggen} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Klein onderhoud:\\ - Maaien natte profiel incl. verwijderen \\ drijfvuil (1x per halfjaar)\\ \\ \\ Groot onderhoud:\\ - Baggeren profiel (1x per 5 jaar)\\ - Verwijderen gezonken voorwerpen \\ (1x per jaar)\\ - Oeveronderhoud (1x per jaar)\\\setcitestyle{authoryear,square,aysep={},yysep={;}}\citep{bodemrichtlijn, regelgeving}\end{tabular}} & €2,75 per m2 \\ \hline
\multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Herinrichting straat \\ (waterinfiltrerende verharding)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Onderzoek:\\ - Visueel inspecteren (1x per jaar)\\ - Doorlatendheid meten (1x per 3 jaar)\\ \\ Onderhoud:\\ - Vegen (1-6x per jaar)\\ - Diepreiniging (1x per 1-7 jaar)\\ - Aanvullen voegspit na reiniging \\ (1x per 1-7 jaar)\\ - Onkruidbestrijding (4-8x per jaar)\end{tabular}} & €3,55 per m2 \\ \hline
\textbf{Benedengronds} & & \\ \hline
\multicolumn{1}{|l|}{Riolering vergroten} & \multicolumn{1}{l|}{x} & nvt \\ \hline
\multicolumn{1}{|l|}{Infiltratiebuizen} & \multicolumn{1}{l|}{Doorspuiten (1x per 3-5 jaar)} & €0,05 per m \\ \hline
\multicolumn{1}{|l|}{Infiltratiekelders} & \multicolumn{1}{l|}{Reiniging (1x per 5 jaar)} & €400,- per 100 m3 \\ \hline
\multicolumn{1}{|l|}{Infiltratiekratten} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}- Inspectie (1x per jaar)\\ - Leegzuigen en onderhouden \\ (1x per 2 jaar)\end{tabular}} & €4,40 per m2 \\ \hline
\multicolumn{1}{|l|}{Bergbezinkbassin} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Spoelpompen reinigen bergings-\\ kelder automatisch (getal ontbreekt)\end{tabular}} & nvt \\ \hline
\end{longtable}
\end{document}
答案1
借助booktabs
水平线,xltabular
为了使表格适合文本宽度,makecell
借助列标题和enumitem
逐项列表,您可以实现以下结果。我专注于表格的前半部分,其余部分可以使用相同的技术进行调整:
\documentclass{article}
\usepackage{xltabular}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\usepackage{enumitem}
\newlist{tabitem}{itemize}{1}
\setlist[tabitem]{wide=0pt, nosep, leftmargin= * ,label=\textendash,}
\usepackage{makecell}
\renewcommand{\theadfont}{\normalsize\bfseries}
\usepackage{booktabs}
\usepackage{makecell}
\begin{document}
\begin{xltabular}{\linewidth}{>{\raggedright\arraybackslash}p{2.75cm}Xl}
\toprule
\thead{Maatregel} & \thead{Onderhoudswerkzaamheden} & \thead{Jaarlijkse\\ kosten} \\ \hline
\textbf{Bovengronds} & & \\
\midrule
Vergoenen tuinen (particulier) & x & nvt \\ \addlinespace
Openbaar groen aanleggen of groen verlagen \newline (infiltratieveld)
& \begin{tabitem}[before=\vspace{-\baselineskip}, after=\vspace{-\baselineskip}]
\item Grasmaaien (1x per 2 weken)
\item Beluchten en verticuteren (1x per jaar)
\end{tabitem}
& €2,15 per m2 \\ \addlinespace
WADI's
& Groendonderhoud: \begin{tabitem}
\item Grasmaaien, zwerfvuil verwijderen (1x per 2 weken)
\item Bladeren verwijderen en verticuteren (1x per jaar)
\end{tabitem}
Correctief onderhoud:\begin{tabitem}[after=\vspace{-\baselineskip}]
\item Opnieuw inzaaien (1x per jaar)
\item Bodemverbetering (1x per 2 jaar)
\item Toplaag vervangen (1x per 10 jaar)
\end{tabitem}
& €7,40 per m2 \\ \addlinespace
%\multicolumn{1}{|l|}{Oppervlakte water aanleggen} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Klein onderhoud:\\ - Maaien natte profiel incl. verwijderen \\ drijfvuil (1x per halfjaar)\\ \\ \\ Groot onderhoud:\\ - Baggeren profiel (1x per 5 jaar)\\ - Verwijderen gezonken voorwerpen \\ (1x per jaar)\\ - Oeveronderhoud (1x per jaar)\\\setcitestyle{authoryear,square,aysep={},yysep={;}}\citep{bodemrichtlijn, regelgeving}\end{tabular}} & €2,75 per m2 \\ \hline
%\multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Herinrichting straat \\ (waterinfiltrerende verharding)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Onderzoek:\\ - Visueel inspecteren (1x per jaar)\\ - Doorlatendheid meten (1x per 3 jaar)\\ \\ Onderhoud:\\ - Vegen (1-6x per jaar)\\ - Diepreiniging (1x per 1-7 jaar)\\ - Aanvullen voegspit na reiniging \\ (1x per 1-7 jaar)\\ - Onkruidbestrijding (4-8x per jaar)\end{tabular}} & €3,55 per m2 \\ \hline
%\textbf{Benedengronds} & & \\ \hline
%\multicolumn{1}{|l|}{Riolering vergroten} & \multicolumn{1}{l|}{x} & nvt \\ \hline
%\multicolumn{1}{|l|}{Infiltratiebuizen} & \multicolumn{1}{l|}{Doorspuiten (1x per 3-5 jaar)} & €0,05 per m \\ \hline
%\multicolumn{1}{|l|}{Infiltratiekelders} & \multicolumn{1}{l|}{Reiniging (1x per 5 jaar)} & €400,- per 100 m3 \\ \hline
%\multicolumn{1}{|l|}{Infiltratiekratten} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}- Inspectie (1x per jaar)\\ - Leegzuigen en onderhouden \\ (1x per 2 jaar)\end{tabular}} & €4,40 per m2 \\ \hline
%\multicolumn{1}{|l|}{Bergbezinkbassin} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Spoelpompen reinigen bergings-\\ kelder automatisch (getal ontbreekt)\end{tabular}} & nvt \\
\bottomrule
\end{xltabular}
\end{document}
答案2
这是使用 longtable 的 MWE,其中有所有难看的垂直线和水平线。我重新定义\arraystretch
并增加了\extrarowheight
表格中的空白。
正如您将看到的,我在三列的定义中计算了相对于边距和相对于另一列的列宽:
\newcolumntype{F}{>{\RaggedRight\arraybackslash}
p{\dimexpr(((\linewidth/18)*6)-(2\tabcolsep+2\arrayrulewidth))\relax}}
如果您喜欢不同的分布,只需将数字更改6
为其他数字,但要确保三个定义累积到 18。如果您更改边距,则 longtable 将会适应。
在单元格内,我更喜欢用 itemize-lists\minipage
来取消上下空间。这样\hsize
可以增加列宽(感谢 David Carlisle)。
\documentclass[dutch]{article}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage{textcomp, array, ragged2e, enumitem}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\def\setcitestyle{}
\def\citep{\cite}
\usepackage{longtable}
\def\arraystretch{1.1}
\setlength{\extrarowheight}{1pt}
\newcolumntype{F}{>{\RaggedRight\arraybackslash}p{\dimexpr(((\linewidth/18)*6)-(2\tabcolsep+2\arrayrulewidth))\relax}}
\newcolumntype{M}{>{\RaggedRight\arraybackslash}p{\dimexpr(((\linewidth/18)*8)-(2\tabcolsep+\arrayrulewidth))\relax}}
\newcolumntype{L}{>{\Centering\arraybackslash}p{\dimexpr(((\linewidth/18)*4)-(2\tabcolsep+\arrayrulewidth))\relax}}
\begin{document}
\setlist[itemize]{wide=0pt, nosep, leftmargin= * ,label=\textendash}
\setlength\LTleft{0pt} % see p. 7 of longtable package user guide
\setlength\LTright{0pt}
\begin{longtable}{|F|M|L|}
\hline
\endfirsthead
\hline
\endhead
\multicolumn{1}{|F|}{\bfseries Maatregel} & \multicolumn{1}{M|}{\bfseries Onderhoudswerkzaamheden} & \multicolumn{1}{L|}{\bfseries Jaarlijkse kosten} \\ \hline
\multicolumn{3}{|l|}{\bfseries Bovengronds} \\ \hline
Vergoenen tuinen (particulier) & x & nvt \\ \hline
Openbaar groen aanleggen of groen verlagen (infiltratieveld) &
\begin{minipage}[t]{\hsize}
\begin{itemize}
\item Grasmaaien (1x per 2 weken)
\item Beluchten en verticuteren (1x per jaar)
\end{itemize}
\end{minipage}
& €2,15 per m2 \\ \hline
WADI's &
\begin{minipage}[t]{\hsize}
Groendonderhoud:
\begin{itemize}
\item Grasmaaien, zwerfvuil verwijderen (1x per 2 weken)
\item Bladeren verwijderen en verticuteren (1x per jaar)
\end{itemize}
\smallskip
Correctief onderhoud:
\begin{itemize}
\item Opnieuw inzaaien (1x per jaar)
\item Bodemverbetering (1x per 2 jaar)
\item Toplaag vervangen (1x per 10 jaar)
\end{itemize}
\end{minipage} &
€7,40 per m2 \\ \hline
Oppervlakte water aanleggen &
\begin{minipage}[t]{\hsize}
Klein onderhoud:
\begin{itemize}
\item Maaien natte profiel incl. verwijderen drijfvuil (1x per halfjaar)
\end{itemize}
\smallskip
Groot onderhoud:
\begin{itemize}
\item Baggeren profiel (1x per 5 jaar)
\item Verwijderen gezonken voorwerpen (1x per jaar)
\item Oeveronderhoud (1x per jaar)
\end{itemize}
\end{minipage}
%\setcitestyle{authoryear,square,aysep={},yysep={;}}\citep{bodemrichtlijn, regelgeving}
& €2,75 per m2 \\ \hline
Herinrichting straat (waterinfiltrerende verharding) &
\begin{minipage}[t]{\hsize}
Onderzoek:
\begin{itemize}
\item Visueel inspecteren (1x per jaar)
\item Doorlatendheid meten (1x per 3 jaar)
\end{itemize}
\smallskip
Onderhoud:
\begin{itemize}
\item Vegen (1-6x per jaar)
\item Diepreiniging (1x per 1-7 jaar)
\item Aanvullen voegspit na reiniging (1x per 1-7 jaar)
\item Onkruidbestrijding (4-8x per jaar)
\end{itemize}
\end{minipage} &
€3,55 per m2 \\ \hline\pagebreak[3]
\multicolumn{3}{|l|}{\bfseries Benedengronds} \\ \nopagebreak\hline
Riolering vergroten & x & nvt \\ \hline
Infiltratiebuizen & Doorspuiten (1x per 3-5 jaar) & €0,05 per m \\ \hline
Infiltratiekelders & Reiniging (1x per 5 jaar) & €400,- per 100 m3 \\ \hline
Infiltratiekratten &
\begin{minipage}[t]{\hsize}
\begin{itemize}
\item Inspectie (1x per jaar)
\item Leegzuigen en onderhouden (1x per 2 jaar)
\end{itemize}
\end{minipage} &
€4,40 per m2 \\ \hline
Bergbezinkbassin & Spoelpompen reinigen bergingskelder automatisch (getal ontbreekt) & nvt \\ \hline
\end{longtable}
\end{document}
答案3
再举一个例子:使用xltabular
并定义第二列\minipage
:
\newcolumntype{R}{>{\minipage[t]{\hsize}\raggedright\arraybackslash}X<{\endminipage}}
完成 MWE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\usepackage{booktabs, makecell, xltabular}
\renewcommand{\theadfont}{\normalsize\bfseries}
\renewcommand\theadgape{}
\newcolumntype{R}[1]{>{\minipage[t]{\hsize}\raggedright\arraybackslash}p{#1}<{\endminipage}}
\usepackage{enumitem}
\newlist{tabitem}{itemize}{1}
\setlist[tabitem]{nosep, leftmargin=*, label=\textendash,}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
\begin{document}
\begin{xltabular}{\linewidth}{@{}>{\raggedleft\arraybackslash}p{30mm} R l @{}}
\toprule
\thead{Maatregel}
& \thead{Onderhoudswerkzaamheden}
& \thead{Jaarlijkse\\ kosten} \\
\midrule
\endhead
%
\textbf{Bovengronds} & & \\
\midrule
Vergoenen tuinen (particulier) & x & nvt \\
\addlinespace[9pt]
Openbaar groen aanleggen of groen verlagen (infiltratieveld)
& \begin{tabitem}
\item Grasmaaien (1x per 2 weken)
\item Beluchten en verticuteren (1x per jaar)
\end{tabitem} & €2,15 per m2 \\
\addlinespace[9pt]
WADI's
& Groendonderhoud:
\begin{tabitem}
\item Grasmaaien, zwerfvuil verwijderen (1x per 2 weken)
\item Bladeren verwijderen en verticuteren (1x per jaar)
\end{tabitem}
Correctief onderhoud:
\begin{tabitem}
\item Opnieuw inzaaien (1x per jaar)
\item Bodemverbetering (1x per 2 jaar)
\item Toplaag vervangen (1x per 10 jaar)
\end{tabitem} & €7,40 per m2 \\
\addlinespace[9pt]
Oppervlakte water aanleggen
& Klein onderhoud:
\begin{tabitem}
\item Maaien natte profiel incl. verwijderen drijfvuil (1x per halfjaar)
\end{tabitem}
Groot onderhoud:
\begin{tabitem}
\item Baggeren profiel (1x per 5 jaar)
\item Verwijderen gezonken voorwerpen (1x per jaar)
\item Oeveronderhoud (1x per jaar) \cite{bodemrichtlijn, regelgeving}
\end{tabitem} & €2,75 per m2 \\
\addlinespace[9pt]
Herinrichting straat (waterinfiltrerende verharding)
& Onderzoek:
\begin{tabitem}
\item Visueel inspecteren (1x per jaar)
\item Doorlatendheid meten (1x per 3 jaar)
\end{tabitem}
Onderhoud:
\begin{tabitem}
\item Vegen (1-6x per jaar)
\item Diepreiniging (1x per 1-7 jaar)
\item Aanvullen voegspit na reiniging (1x per 1-7 jaar)
\item Onkruidbestrijding (4-8x per jaar)
\end{tabitem} & €3,55 per m2 \\
\midrule
\textbf{Benedengronds}
& & \\
\midrule
Riolering vergroten
& x & nvt \\
\addlinespace[9pt]
Infiltratiebuizen
& Doorspuiten (1x per 3-5 jaar)
& €0,05 per m \\
\addlinespace[9pt]
Infiltratiekelders
& Reiniging (1x per 5 jaar)
& €400,00 per 100 m3 \\
\addlinespace[9pt]
Infiltratiekratten
& \begin{tabitem}
\item Inspectie (1x per jaar)
\item Leegzuigen en onderhouden (1x per 2 jaar)
\end{tabitem} & €4,40 per m2 \\
\addlinespace[9pt]
Bergbezinkbassin
& Spoelpompen reinigen bergings
\begin{tabitem}
\item kelder automatisch (getal ontbreekt)
\end{tabitem} & nvt \\
\bottomrule
\end{xltabular}
\end{document}
经过两次编译后,上述MWE的结果是:
(红线表示页面布局)