如何使用 xelatex 将文本放在文档最后一句的末尾?

如何使用 xelatex 将文本放在文档最后一句的末尾?

我有很多文件,所有文件都必须共享相同的最后文字。

但是此文本必须紧跟最后一句 — — 不换行 — —。

我尝试修改document环境,但由于有换行符,所以不起作用。

因此,这是我想要用 xelatex 编译的代码示例:

\documentclass{article}

\thelasttext{\textbf{(this the last text)}}

\begin{document}

Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi
auctor lorem non justo. Nam lacus libero, pretium at, lobortis vitae, ultricies et,
tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna,
vitae ornare odio metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse
ut massa. Cras nec ante. Pellentesque a nulla. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus. Aliquam tincidunt urna.
Nulla ullamcorper vestibulum turpis. Pellentesque cursus luctus mauris.
Nulla malesuada porttitor diam. Donec felis erat, congue non, volutpat at,
tincidunt tristique, libero. Vivamus viverra fermentum felis. Donec nonummy
pellentesque ante. Phasellus adipiscing semper elit. Proin fermentum massa
ac quam. Sed diam turpis, molestie vitae, placerat a, molestie nec, leo. Mae-
cenas lacinia. Nam ipsum ligula, eleifend at, accumsan nec, suscipit a, ipsum.
Morbi blandit ligula feugiat magna. Nunc eleifend consequat lorem. Sed lacinia
nulla vitae enim. Pellentesque tincidunt purus vel magna. Integer non enim.
Praesent euismod nunc eu purus. Donec bibendum quam in tellus. Nullam cur-
sus pulvinar lectus. Donec et mi. Nam vulputate metus eu enim. Vestibulum
pellentesque felis eu massa.
Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo vitae lacus
tincidunt ultrices. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In
hac habitasse platea dictumst. Integer tempus convallis augue. Etiam facilisis.
Nunc elementum fermentum wisi. Aenean placerat. Ut imperdiet, enim sed
gravida sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget enim.
Nunc vitae tortor. Proin tempus nibh sit amet nisl. Vivamus quis tortor vitae 

\end{document}

这是我期望的渲染:在此处输入图片描述

如您所见,我很奇怪我设置的变量文本\thelasttext是否紧跟在最后一句的同一行中。这就是为什么重新定义document环境并不是真正的解决方案。

那么,使用 xelatex 可以实现这个吗?如何实现?

编辑:明确 xelatex 的需要。

答案1

您可以尝试一下这个:

\newwrite\tmpfile  \newcount\numpar  \newcount\numpars

\openin10=\jobname.num
\ifeof10 \numpars=-1 \else \closein10 \numpars=\input\jobname.num \relax \fi
\immediate\openout\tmpfile=\jobname.num

\def\thelasttext{{\bf (The last blaf.)}}

\def\par{\ifhmode 
     \global\advance\numpar by1 
     \ifnum\numpar=\numpars \thelasttext \fi 
     \endgraf 
  \fi
}
\def\bye{\par \immediate\write\tmpfile{\the\numpar}\penalty0\end}

First paragraph. Ruerrhv lnss ks.

Second. Mfffkl kjd s sf.

Last. Nsf sjkvf jkf fffbfd.

\bye

使用外部文件\jobname.num,这里保存的是文档的段落数,当然如果要看到效果的话,必须对文档进行两次处理。

\bye(或者\end{document}在您的情况下,\AtEndDocument声明为\par\immediate\write\tmpfile{\the\numpar})可以在其之前立即有空行,但这不是明确需要的。

答案2

如果文档很简单,并且软件包和内核在保存/恢复 的定义时能正确完成工作\par,那么另一种方法可能有效。但这不太可能。

\def\thelasttext{\textbf{(this the last text)}}
\let\savedpar\par
\protected\def\par{\futurelet\tmp\editedpar}
\protected\def\editedpar
  {\ifx\tmp\end\expandafter\editedparcheckend\else\expandafter\savedpar\fi}
\protected\def\editedparcheckend\end#1%
  {\def\tmpa{#1}\def\tmpb{document}\ifx\tmpa\tmpb
   \thelasttext\let\thelasttext\relax\fi\savedpar\end{#1}}
\AtEndDocument{\thelasttext}

相关内容