我有以下代码:
\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
,然后根据喜好进行调整!