我正在做一个项目,需要从一个 JSON 文件中生成一本书,其中包含数千个用作段落的条目。当我将代码插入 LaTeX 时,一些段落会分成两页。我想知道是否有办法说:“如果段落会断开,则将其全部移到下一页”?
类似的东西\newpage
对我而言毫无用处,因为条目太多,无法手动完成。我正在寻找更具程序性的解决方案。我还查看了:
\widowpenalties 1 10000
\raggedbottom
但在我看来,这样做似乎只是扩展文本直到页面完成,而不是将文本传播到新页面。下面是我的代码的简化版本,使用了正在使用的格式:
%------------------------
% Invoke Packages
%------------------------
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lipsum,lineno}
%------------------------
% Set Dimensions
%------------------------
\usepackage[
paperwidth = 168.3mm,
paperheight = 260.4mm,
top = 6mm,
bottom = 7mm,
outer = 6mm,
inner = 20mm
]{geometry}
%------------------------
% Remove indentation from all paragraphs
%------------------------
\setlength\parindent{0pt}
% Comments
\newcommand{\CommentFontSize}{21}
\newcommand{\CommentSkipMult}{25}
% Author
\newcommand{\UserFontSize}{16}
\newcommand{\UserSkipMult}{0}
% Date
\newcommand{\DateFontSize}{15}
\newcommand{\DateSkipMult}{0}
% Comments
\newenvironment{commentTextFont}{
\fontfamily{mdugm}
\fontsize{\CommentFontSize}{\CommentSkipMult}
\selectfont}
{\par}
% Author
\newenvironment{userFont}{
\fontfamily{mdugm}
\fontsize{\UserFontSize}{\UserSkipMult}
\selectfont}
{\par}
% Date
\newenvironment{dateFont}{
\fontfamily{mdugm}
\fontsize{\DateFontSize}{\DateSkipMult}
\selectfont}
{\par}
%------------------------
% Set commands
%------------------------
\newcommand{\uComment}[3]{
\begin{commentTextFont} #1 \end{commentTextFont}
\vspace*{0.5cm}
\begin{userFont} \textit{#2}
\hspace*{\fill} \begin{dateFont} #3 \end{dateFont}
\end{userFont}
\vspace*{0.8cm}
}
%------------------------
% Document
%------------------------
\begin{document}
\begin{flushleft}
\uComment{\lipsum[73]}{someone}{2000}
\uComment{\lipsum[75]}{someone}{2000}
\uComment{\lipsum[66]}{someone}{2000}
\end{flushleft}
\end{document}
有什么想法可以解决这个问题吗?
答案1
在我看来,您使用的定义非常复杂,可以简化,但解决方案无论如何都很简单:
\newcommand{\uComment}[3]{%
\filbreak
\begin{commentTextFont}#1\end{commentTextFont}%
\vspace*{0.5cm}
\begin{userFont}\textit{#2}\hspace*{\fill}%
\begin{dateFont}#3\end{dateFont}\end{userFont}%
\vspace*{0.8cm}
}
我\filbreak
在段落前使用了它,意思是:在这里分页,除非\filbreak
出现进一步的内容并且中间的文本适合该页面。
这是完整的代码,其中插入的所有虚假空格都已删除。
%------------------------
% Invoke Packages
%------------------------
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lipsum,lineno}
%------------------------
% Set Dimensions
%------------------------
\usepackage[
paperwidth = 168.3mm,
paperheight = 260.4mm,
top = 6mm,
bottom = 7mm,
outer = 6mm,
inner = 20mm
]{geometry}
%------------------------
% Remove indentation from all paragraphs
%------------------------
\setlength\parindent{0pt}
% Comments
\newcommand{\CommentFontSize}{21}
\newcommand{\CommentSkipMult}{25}
% Author
\newcommand{\UserFontSize}{16}
\newcommand{\UserSkipMult}{0}
% Date
\newcommand{\DateFontSize}{15}
\newcommand{\DateSkipMult}{0}
% Comments
\newenvironment{commentTextFont}
{\fontfamily{mdugm}%
\fontsize{\CommentFontSize}{\CommentSkipMult}%
\selectfont}
{\par}
% Author
\newenvironment{userFont}
{\fontfamily{mdugm}%
\fontsize{\UserFontSize}{\UserSkipMult}%
\selectfont}
{\par}
% Date
\newenvironment{dateFont}
{\fontfamily{mdugm}%
\fontsize{\DateFontSize}{\DateSkipMult}%
\selectfont}
{\par}
%------------------------
% Set commands
%------------------------
\newcommand{\uComment}[3]{%
\filbreak
\begin{commentTextFont}#1\end{commentTextFont}%
\vspace*{0.5cm}
\begin{userFont}\textit{#2}\hspace*{\fill}%
\begin{dateFont}#3\end{dateFont}\end{userFont}%
\vspace*{0.8cm}
}
%------------------------
% Document
%------------------------
\begin{document}
\raggedright
\uComment{\lipsum[73]}{someone}{2000}
\uComment{\lipsum[75]}{someone}{2000}
\uComment{\lipsum[66]}{someone}{2000}
\end{document}
分页符的图片。