这个问题引出了包中的一个新功能:
impnattypo
法语字体排版中有一条规则,即段落的最后一行不应短于下一段落缩进的两倍。
是否可以指定这一点,或者至少考虑到所有段落都缩进相同的值,以确保最后一行的长度超过该值的两倍?
也欢迎特定于 LuaTeX 的解决方案。
答案1
您要求一个 LuaTeX 解决方案,并且您得到了一个:
\documentclass{article}
\usepackage{luatexbase,luacode}
\begin{luacode}
local PENALTY=node.id("penalty")
last_line_twice_parindent = function (head)
while head do
local _w,_h,_d = node.dimensions(head)
if head.id == PENALTY and head.subtype ~= 15 and (_w < 2 * tex.parindent) then
-- we are at a glue and have less than 2*\parindent to go
local p = node.new("penalty")
p.penalty = 10000
p.next = head
head.prev.next = p
p.prev = head.prev
head.prev = p
end
head = head.next
end
return true
end
luatexbase.add_to_callback("pre_linebreak_filter",last_line_twice_parindent,"Raphink")
\end{luacode}
\begin{document}
\parindent = 2cm
\emergencystretch = \hsize
A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel.
The charm of existence in this spot, which was created for the bliss of souls like mine.
I am so happy, my dear friend, so absorbed in the exquisite sense of mere tranquil existence, that I neglect my talents. I should be
incapable of drawing a single stroke at the present moment; and yet I feel that I never was a greater artist than now.
\end{document}
它的作用是~
,当到段落末尾的距离小于 2* 时,它会在段落末尾的单词之间添加连接线 ( ) \parindent
。如果\parindent
足够大,段落会变得难看。
注意:这不会阻止连字符。因此,hbox 等不会强制执行最小量。这是留给有抱负的读者的练习。
编辑:不要对字形 ID 进行硬编码......
答案2
在每个段落的末尾,TeX 通常会添加无限可拉伸的粘连,因为的通常设置\parfillskip
相当于
\setlength{\parfillskip}{0pt plus 1fill}
一种方法可能是设置
\setlength{\parfillskip}{0pt plus\dimexpr\textwidth-2\parindent}
但这只适用于普通段落。在列表中,应该用而不是 来\parfillskip
重置:其值如前所述为\linewidth
\textwidth
不是动态计算,但它是固定的。如果\parfillskip
是宏,而不是 skip 参数(或者 Knuth 提供了\everyendofpar
token 参数),情况就会有所不同。\par
当然,人们可能会重新定义,但 LaTeX 在某些情况下已经这样做了。
注意胶水总是可以拉伸的更多的比规定值要高,但在这种情况下,线路的劣化程度会增加,通常会产生一条Underfull \hbox
消息。一般来说,我不太相信这样的自动调整:没有一个自动化系统能够像你一样做到这一点,Knuth 写了关于分页的内容,但是段落划分非常相似,特别是对于最后一行。