为什么 (La)TeX 在这种情况下会破坏页面?

为什么 (La)TeX 在这种情况下会破坏页面?

我有以下代码:

\documentclass{article}
\usepackage[cp1252]{inputenc}
\usepackage[showframe]{geometry}
\usepackage{environ}
\usepackage{tabularx,array,booktabs}

\NewEnviron{woche}[2]{
 \paragraph*{Woche vom #1 bis #2}~\nopagebreak
 \vspace{1em}\\*
 \tabularx{0.97\textwidth}{m{0.9cm}X}
 \toprule
  \BODY
 \bottomrule
}[
 \endtabularx]

\begin{document}
\vspace*{16cm}
\begin{woche}{2}{3}
  28.11. & Was ich alles an dem ersten Tag dieser Woche getan habe! \\
  29.11. & Der zweite Tag wa recht lang. \\
  30.11. & Nur Doku geschrieben \\
  01.12. & Ich freie mich schon auf's Wochenende, aber noch sind wir nicht soweit. Ich muss noch ganze zwei Tage runterreißen. \\
  02.12. & Letzter Tag! Endlich! \\
\end{woche}
\end{document}

现在,如果我使用 pdfLaTeX 编译文件,我会得到两页。第一页是标题Woche 2 bis 3,第二页是表格。vspace 只是为了模拟一些其他文本或东西。我该如何修改环境以使其运行?

答案1

的通常设置\paragraph是排版内联标题。将其更改为如下形式\section,例如使用titlesec包:

\usepackage{titlesec}
\titleformat{\paragraph}{}{}{0pt}{\bfseries}
\titlespacing*{\paragraph}{0pt}{\baselineskip}{1.5ex}
\usepackage{environ}
\usepackage{tabularx,array,booktabs}

\NewEnviron{woche}[2]{%
 \paragraph*{Woche vom #1 bis #2}
 \tabularx{\textwidth}{m{0.9cm}X}
 \toprule
  \BODY
 \bottomrule
}[\endtabularx\par]

调整间距以满足您的需要。

或者,将标题放在里面tabularx并忘记\paragraph

\NewEnviron{woche}[2]{%
 \par\addvspace{2.5ex}
 \noindent\tabularx{\textwidth}{m{0.9cm}X}
 \multicolumn{2}{@{}l@{}}{\bfseries Woche vom #1 bis #2}\\[1.5ex]
 \toprule
  \BODY
 \bottomrule}
 [\endtabularx\par]

这似乎是最干净的解决方案。

答案2

总是想要在标题后换行吗?显示标题后,LaTex 会费些力气来防止分页,并且会按照您的意愿将整个标题拉到下一页,如果您将代码更改为

 \section*{Woche vom #1 bis #2}

 \tabularx{0.97\textwidth}{m{0.9cm}X}

而不是使用段落*。

因此最简单的方法是将其定义\paragraph*为显示标题而不是插入标题。如果您希望大多数段落都有一个插入标题,除非下一个内容是表格之类的大项目,那么@ulrike-fischer 的评论(我刚刚注意到)可能是您的答案。

答案3

正在\vspace*{16cm}强制将表格移至下一页。使用 进行测试1cm,然后根据喜好进行调整!

相关内容