longtabu:如果某些行位于页面底部,则将其推送到新页面

longtabu:如果某些行位于页面底部,则将其推送到新页面

我在使用 longtabu 时遇到了一个棘手的问题。我有一个程序,它可以生成会计报告的 LaTeX 代码,这是使用 longtabu 完成的,其中每一行要么是一个帐户(带有总数),要么是一个标题(标识一组帐户)。标题很特殊,因为它们顶部有一个 \hline 和粗体字体。现在,标题可能会出现在页面底部,见下图: 报告示例

在这个报告中,最后一行“20 Dettes commerce”是一个标题,该标题下的账户都出现在新页面中。

我的问题是,我想避免标题单独出现在页面底部,在我们的示例中,我希望将“20 Dettes commerce”推到下一页。我无法手动插入分页符,因为正如我所说,LaTeX 是由程序生成的,我不知道生成时哪一页会出现什么,所以我需要 LaTeX(在我的特定情况下是 xeLateX)找出此行出现在底部的事实,并自动插入分页符。

我尝试查看 \pagetotal 宏,但它在表格中似乎总是 0.0pt(我读到过某处说 \pagetotal 在表格内不起作用)。我还尝试使用 \needspace,但它没有给我确切的结果。

因此问题是:

  • 有没有一种有用的方法可以在表格中使用 pagetotal 来检测我在页面中的向下距离?和/或
  • 有没有一种有用的方法可以使用 needspace 来表示我不想在页面底部显示标题行?和/或
  • 还有其他想法吗?:)

多谢!

以下是示例代码:

 \documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[table]{xcolor}
\usepackage{seqsplit}
\usepackage{helvet}
\usepackage{graphicx}
\usepackage{grfext}
\usepackage{tabu}
\usepackage[francais,germanb,english,dutch]{babel}
\usepackage[margin=1.5cm,portrait,includehead,includefoot]{geometry}
\usepackage{longtable}
\usepackage{fancyhdr,lastpage}
\usepackage{pgfpages}
\usepackage{verbatim}
\usepackage{needspace}
\usepackage[export]{adjustbox} 
\usepackage{hanging}\newlength{\hangwidth}
\newcommand{\myhang}[2]{\settowidth{\hangwidth}{#1 }\addtolength{\hangwidth}{#2}\hangpara{\hangwidth}{1}#1}
\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\arraystretch}{1.5}
\newcommand{\tabledefine}{\rowcolors{2}{white}{white}}
\newcommand{\myalign}[1]{\multicolumn{1}{>{\columncolor{gray!50}}l}{#1}}
\newcommand{\rowdefine}{\rowcolor{gray!50}}



\pagestyle{fancy}
\lhead{Balance bidon\_1(CHF)}
\rhead{01/07/2011 $-$ 31/12/2012}
\lfoot{24/04/2014}
\cfoot{\thepage\ / \pageref{LastPage}}
\rfoot{Balance.pdf}
\begin{document}
\nonstopmode
\footnotesize 
\definecolor{lightBlue}{rgb}{0.93,0.95,1.0}
\definecolor{lightGray}{rgb}{0.9,0.9,0.9}
\definecolor{darkerGray}{rgb}{0.7,0.7,0.7}
\selectlanguage{francais}
\tabledefine
\tabulinesep=1.2mm
\begin{longtabu} to \textwidth {X[l]X[r]X[r]}
\hline
\rowcolor{lightBlue}Compte & D\'ebit & Cr\'edit\\\hline\endhead
\\\hline\rowcolor{black}\parindent=1.5mm\indent \textbf{{\color{white}\myhang{BILAN}{1.5mm}}} & \textbf{{\color{white} }} & \parindent=1.5mm\indent \textbf{{\color{white} }}\\
\\\hline\parindent=3mm\indent \textbf{\myhang{1}{3mm} ACTIFS} & \textbf{ } & \parindent=3mm\indent \textbf{ }\\
\\\hline\parindent=4.5mm\indent \textbf{\myhang{10}{4.5mm} Liquidit\'es} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1000}{6mm} Caisse & \myhang{256.06}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1001}{6mm} Caisse EUR &   & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1010}{6mm} Poste &   & \parindent=6mm\indent \myhang{111.00}{0mm}\\
\parindent=6mm\indent \myhang{1020}{6mm} Banque d\'ep\^ot & \myhang{27'946.76}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1030}{6mm} Banque Carte cr\'edit & \myhang{288.47}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1060}{6mm} Titres & \myhang{1'000.00}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1070}{6mm} Rabobank &   & \parindent=6mm\indent \myhang{32.00}{0mm}\\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{10}{4.5mm} Liquidit\'es} & \textit{\myhang{29'348.29}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{11}{4.5mm} Cr\'eances} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1100.1001}{6mm} UBS &   & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1120}{6mm} Actif transitoire & \myhang{0.74}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1170}{6mm} TVA d\'eductible sur mat\'eriel et service &   & \parindent=6mm\indent \myhang{2.56}{0mm}\\
\parindent=6mm\indent \myhang{1171}{6mm} TVA d\'eductible sur investissement & \myhang{17.37}{0mm} & \parindent=6mm\indent  \\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{11}{4.5mm} Cr\'eances} & \textit{\myhang{15.55}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{12}{4.5mm} Stocks} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1200}{6mm} Stock marchandises &   & \parindent=6mm\indent \myhang{12.00}{0mm}\\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{12}{4.5mm} Stocks} & \textit{ } & \parindent=4.5mm\indent \textit{\myhang{12.00}{0mm}}\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{13}{4.5mm} R\'egulation} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1300}{6mm} Charges constat\'ees en avance & \myhang{26'099.00}{0mm} & \parindent=6mm\indent  \\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{13}{4.5mm} R\'egulation} & \textit{\myhang{26'099.00}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\rowcolor{lightGray} Total \parindent=3mm\indent \textit{\myhang{1}{3mm} ACTIFS} & \textit{\myhang{55'450.84}{0mm}} & \parindent=3mm\indent \textit{ }\\\hline
\\\hline\parindent=3mm\indent \textbf{\myhang{2}{3mm} PASSIF} & \textbf{ } & \parindent=3mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{2.1}{6mm} Passif 1 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.2}{6mm} Passif 2 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.3}{6mm} Passif 3 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.4}{6mm} Passif 4 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.5}{6mm} Passif 5 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\\\hline\parindent=4.5mm\indent \textbf{\myhang{20}{4.5mm} Dettes commerce } & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{2000.1001}{6mm} Bloomberg &   & \parindent=6mm\indent \myhang{27'098.71}{0mm}\\
\parindent=6mm\indent \myhang{2000.1002}{6mm} Goldentech &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\end{longtabu}
\end{document}

答案1

tabu长表中,您可以使用\\*不分页符结束行。当页面结束时,您可能也会遇到问题\hline。如果是这种情况,请将

\makeatletter
\newcommand\nobreakhline{%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\\*}
\makeatother

在你的序言中并使用\nobreakhline代替\hline

以下是您的 MME,其中包含上述更改。我希望这是您想要的结果:

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[table]{xcolor}
\usepackage{seqsplit}
\usepackage{helvet}
\usepackage{graphicx}
\usepackage{grfext}
\usepackage{tabu}
\usepackage[francais,germanb,english,dutch]{babel}
\usepackage[margin=1.5cm,portrait,includehead,includefoot]{geometry}
\usepackage{longtable}
\usepackage{fancyhdr,lastpage}
\usepackage{pgfpages}
\usepackage{verbatim}
\usepackage{needspace}
\usepackage[export]{adjustbox} 
\usepackage{hanging}\newlength{\hangwidth}
\newcommand{\myhang}[2]{\settowidth{\hangwidth}{#1 }\addtolength{\hangwidth}{#2}\hangpara{\hangwidth}{1}#1}
\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\arraystretch}{1.5}
\newcommand{\tabledefine}{\rowcolors{2}{white}{white}}
\newcommand{\myalign}[1]{\multicolumn{1}{>{\columncolor{gray!50}}l}{#1}}
\newcommand{\rowdefine}{\rowcolor{gray!50}}

\makeatletter
\newcommand\nobreakhline{%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\\*}
\makeatother
\pagestyle{fancy}
\lhead{Balance bidon\_1(CHF)}
\rhead{01/07/2011 $-$ 31/12/2012}
\lfoot{24/04/2014}
\cfoot{\thepage\ / \pageref{LastPage}}
\rfoot{Balance.pdf}
\begin{document}
\nonstopmode
\footnotesize 
\definecolor{lightBlue}{rgb}{0.93,0.95,1.0}
\definecolor{lightGray}{rgb}{0.9,0.9,0.9}
\definecolor{darkerGray}{rgb}{0.7,0.7,0.7}
\selectlanguage{francais}
\tabledefine
\tabulinesep=1.2mm
\begin{longtabu} to \textwidth {X[l]X[r]X[r]}
\hline
\rowcolor{lightBlue}Compte & D\'ebit & Cr\'edit\\\hline\endhead
\\\hline\rowcolor{black}\parindent=1.5mm\indent \textbf{{\color{white}\myhang{BILAN}{1.5mm}}} & \textbf{{\color{white} }} & \parindent=1.5mm\indent \textbf{{\color{white} }}\\
\\\hline\parindent=3mm\indent \textbf{\myhang{1}{3mm} ACTIFS} & \textbf{ } & \parindent=3mm\indent \textbf{ }\\
\\\hline\parindent=4.5mm\indent \textbf{\myhang{10}{4.5mm} Liquidit\'es} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1000}{6mm} Caisse & \myhang{256.06}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1001}{6mm} Caisse EUR &   & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1010}{6mm} Poste &   & \parindent=6mm\indent \myhang{111.00}{0mm}\\
\parindent=6mm\indent \myhang{1020}{6mm} Banque d\'ep\^ot & \myhang{27'946.76}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1030}{6mm} Banque Carte cr\'edit & \myhang{288.47}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1060}{6mm} Titres & \myhang{1'000.00}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1070}{6mm} Rabobank &   & \parindent=6mm\indent \myhang{32.00}{0mm}\\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{10}{4.5mm} Liquidit\'es} & \textit{\myhang{29'348.29}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{11}{4.5mm} Cr\'eances} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1100.1001}{6mm} UBS &   & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1120}{6mm} Actif transitoire & \myhang{0.74}{0mm} & \parindent=6mm\indent  \\
\parindent=6mm\indent \myhang{1170}{6mm} TVA d\'eductible sur mat\'eriel et service &   & \parindent=6mm\indent \myhang{2.56}{0mm}\\
\parindent=6mm\indent \myhang{1171}{6mm} TVA d\'eductible sur investissement & \myhang{17.37}{0mm} & \parindent=6mm\indent  \\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{11}{4.5mm} Cr\'eances} & \textit{\myhang{15.55}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{12}{4.5mm} Stocks} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1200}{6mm} Stock marchandises &   & \parindent=6mm\indent \myhang{12.00}{0mm}\\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{12}{4.5mm} Stocks} & \textit{ } & \parindent=4.5mm\indent \textit{\myhang{12.00}{0mm}}\\\hline
\\\hline\parindent=4.5mm\indent \textbf{\myhang{13}{4.5mm} R\'egulation} & \textbf{ } & \parindent=4.5mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{1300}{6mm} Charges constat\'ees en avance & \myhang{26'099.00}{0mm} & \parindent=6mm\indent  \\
\rowcolor{lightGray} Total \parindent=4.5mm\indent \textit{\myhang{13}{4.5mm} R\'egulation} & \textit{\myhang{26'099.00}{0mm}} & \parindent=4.5mm\indent \textit{ }\\\hline
\rowcolor{lightGray} Total \parindent=3mm\indent \textit{\myhang{1}{3mm} ACTIFS} & \textit{\myhang{55'450.84}{0mm}} & \parindent=3mm\indent \textit{ }\\\hline
\\\hline\parindent=3mm\indent \textbf{\myhang{2}{3mm} PASSIF} & \textbf{ } & \parindent=3mm\indent \textbf{ }\\
\parindent=6mm\indent \myhang{2.1}{6mm} Passif 1 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.2}{6mm} Passif 2 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.3}{6mm} Passif 3 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.4}{6mm} Passif 4 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\parindent=6mm\indent \myhang{2.5}{6mm} Passif 5 &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\\\nobreakhline\parindent=4.5mm\indent \textbf{\myhang{20}{4.5mm} Dettes commerce } &
\textbf{ } & \parindent=4.5mm\indent \textbf{ }\\*
\parindent=6mm\indent \myhang{2000.1001}{6mm} Bloomberg &   & \parindent=6mm\indent \myhang{27'098.71}{0mm}\\
\parindent=6mm\indent \myhang{2000.1002}{6mm} Goldentech &   & \parindent=6mm\indent \myhang{2'000.00}{0mm}\\
\end{longtabu}
\end{document}    

在此处输入图片描述

相关内容