这个问题引出了包中的一个新功能:
impnattypo
我来自波兰,正在用我的母语写一些文字。我们的排版标准之一是,我们不会在行尾留下一个字母的单词。例如:
Mietek poszedl do sklepu i
kupil jabola
是非法的,正确的应该是这样的:
Mietek poszedl do sklepu
i kupil jabola
我不知道美国/英语排版中是否也有这样的规则,但我找不到任何可以修复此类错误的乳胶设置。到目前为止,我发现的唯一解决方案是添加“~”字符,它似乎可以用作空格,但也可以防止行间断开连接的单词。所以我必须写:
Mietek poszedl do sklepu i~kupil jabola
还有其他方法吗?我试过
\widowpenalty10000
\clubpenalty10000
这样可以避免出现孤儿字,但对我们(波兰人)来说,“孤儿”一词似乎与美国人有所不同;)在美国,“孤儿”是指页面最后一行上段落的第一行(至少我这么认为),但对我们来说,“孤儿”是指行末的单字母单词。
答案1
这是一个 LuaLaTeX 解决方案。这是一个在 TeX 将文本拆分成行之前调用的函数。它~
在单个字母的单词后插入连字符(仅惩罚 10000,粘合已经存在)。单词仍将使用连字符(参见下面的示例)- 据我所知(在 w 之后)。
[编辑:我在代码中添加了检查,只检查字母(L* Unicode 字符类) 将在防止字形后出现换行时予以考虑。
\documentclass{article}
\usepackage{polski}
\usepackage[polish]{babel}
\usepackage{fontspec}
\usepackage{luatexbase}\usepackage{luacode}
\begin{luacode}
local prevent_single_letter = function (head)
while head do
if head.id == 37 and unicode.utf8.match(unicode.utf8.char(head.char),"%a") then -- a letter
if head.prev.id == 10 and head.next.id == 10 then -- only if we are at a one letter word
local p = node.new("penalty")
p.penalty = 10000
-- This is for debugging only, but then you have to
-- remove the last node.insert_after line:
-- local w = node.new("whatsit","pdf_literal")
-- w.data = "q 1 0 1 RG 1 0 1 rg 0 0 m 0 5 l 2 5 l 2 0 l b Q"
-- node.insert_after(head,head,w)
-- node.insert_after(head,w,p)
node.insert_after(head,head,p)
end
end
head = head.next
end
return true
end
luatexbase.add_to_callback("pre_linebreak_filter",prevent_single_letter,"active~")
\end{luacode}
\begin{document}
\hsize 2.7in
Noc była sierpniowa, ciepła i słodka, Księżyc oświecał srebrnem światłem wgłębienie, tak,
że twarze małego rycerza i Basi były skąpane w blasku.
Poniżej, na podwórzu zamkowem, widać było uśpione kupy żołnierzy, a także i ciała zabitych
podczas dziennej strzelaniny, bo nie znaleziono dotąd czasu na ich pogrzebanie.
\end{document}
顺便说一句:小连字符是用包装做成的showhyphens
。
答案2
从 0.2 版开始,该impnattypo
包包含一个nosingleletter
使用帕特里克算法:
\documentclass{article}
\usepackage{polski}
\usepackage[polish]{babel}
\usepackage{fontspec}
\usepackage[draft,nosingleletter]{impnattypo}
\begin{document}
\hsize 2.7in
Noc była sierpniowa, ciepła i słodka, Księżyc oświecał srebrnem światłem wgłębienie, tak,
że twarze małego rycerza i Basi były skąpane w blasku.
Poniżej, na podwórzu zamkowem, widać było uśpione kupy żołnierzy, a także i ciała zabitych
podczas dziennej strzelaniny, bo nie znaleziono dotąd czasu na ich pogrzebanie.
\end{document}