![两个特定段落的连接](https://linux22.com/image/359809/%E4%B8%A4%E4%B8%AA%E7%89%B9%E5%AE%9A%E6%AE%B5%E8%90%BD%E7%9A%84%E8%BF%9E%E6%8E%A5.png)
我有一种特定类型的文本。它看起来像一个由几行组成的大段落,然后一行中又包含一个段落(并且包含一个指向链接的引用)。但是文本太大,所以会出现这样的情况:一个段落停留在一页上,而只有另一个段落(链接)指向另一页。
最奇妙的情况是,如果在下一页转移最后一行的大段落和一个段落链接。可以这样做吗?
PS 这不是“寡妇和孤儿”。这是两个不同的段落。
它看起来像这样:
考虑到我的出生日期和时间,保姆和附近一些贤惠的妇女(她们在我们有可能亲自认识之前的几个月就对我很感兴趣)都说,首先,我注定一生不幸;其次,我有幸看到鬼魂和灵魂;她们相信,这两种天赋不可避免地与所有在星期五晚上凌晨出生的不幸婴儿(无论男女)有关。
XXX(链接)
但是当我有分页符时,我可以得到这个:
考虑到我的出生日期和时间,保姆和附近一些贤惠的妇女(她们在我们有可能亲自认识之前的几个月就对我很感兴趣)都说,首先,我注定一生不幸;其次,我有幸看到鬼魂和灵魂;她们相信,这两种天赋不可避免地与所有在星期五晚上凌晨出生的不幸婴儿(无论男女)有关。
- - - - 新一页 - - - -
XXX(链接)
我需要的最佳变体如下所示:
考虑到我的出生日期和时间,保姆和附近一些贤惠的妇女(她们在我们有可能亲自认识我之前几个月就对我产生了浓厚的兴趣)都说,首先,我注定一生不幸;其次,我有幸看到鬼魂和灵魂;她们相信,这两种天赋不可避免地与所有不幸的婴儿有关。
- - - - 新一页 - - - -
无论性别,都是在周五晚上的凌晨出生的。
XXX(链接)
答案1
使用\par\nobreak\noindent
。下面的示例将文本高度设置为七行,因此主段落的第七行将适合(如果\finallink
省略则适合)。
\documentclass{article}
\newcommand{\finallink}[1]{%
\par\nobreak\noindent#1\par
}
\textheight=7\baselineskip % just for the example
\begin{document}
In consideration of the day and hour of my birth,
it was declared by the nurse, and by some sage women
in the neighbourhood who had taken a lively interest
in me several months before there was any possibility
of our becoming personally acquainted, first, that
I was destined to be unlucky in life; and secondly,
that I was privileged to see ghosts and spirits;
both these gifts inevitably attaching, as they believed,
to all unlucky infants of either gender, born towards
the small hours on a Friday night.
\finallink{David Copperfield, Chapter One}
\end{document}
答案2
此解决方案使用特殊环境来检查文本是否适合页面并在页面底部添加链接。首先,它检查是否有空间容纳链接和至少一行文本。
它使用 tikzpagenodes 来计算页面上剩余的空间(需要运行两次)。目前它只假设\parskip
文本和链接之间。
该\vsplit
命令是 LaTeX 用来在页面末尾分段的命令。它旨在将最后一段基线置于文本区域的底部,使下行线可以延伸到下方。
请注意,环境总是使用本地寄存器。
\documentclass{article}
\usepackage{tikzpagenodes}
\usepackage{environ}
\usepackage{needspace}
\usepackage{lipsum}% MWE only
\usepackage{showframe}% MWE only
\newlength{\SPsize}
\NewEnviron{splitpar}[1]% #1 = link
{\setbox0=\vbox{\BODY}%
\setbox1=\vbox{\hrule height0pt\par#1}% include gap
\needspace{\dimexpr \baselineskip+\ht1}% check if link will fit at all
\strut\tikz[remember picture,overlay]{\pgfextracty{\SPsize}{\pgfpointdiff
{\pgfpointanchor{current page text area}{south}}{\pgfpointorigin}}%
\global\SPsize=\dimexpr \SPsize+\ht\strutbox\relax}%
\vspace{-\baselineskip}% will be on separate line
\ifdim\SPsize<\dimexpr \ht0+\dp0+\lineskip+\ht1\relax
\setbox2=\vsplit0 to \dimexpr \SPsize-\dp\strutbox-\lineskip-\ht1\relax
\unvbox2\vfil\unvbox1
\pagebreak\unvbox0
\else
\unvbox0\unvbox1
\fi
\par}
\parskip=\baselineskip
\begin{document}
\begin{splitpar}{link goes here}
\lipsum[1-5]
\end{splitpar}
\end{document}