![ConTeXt 中单字母单词后的硬空格](https://linux22.com/image/405048/ConTeXt%20%E4%B8%AD%E5%8D%95%E5%AD%97%E6%AF%8D%E5%8D%95%E8%AF%8D%E5%90%8E%E7%9A%84%E7%A1%AC%E7%A9%BA%E6%A0%BC.png)
我正在寻找一个 ConTeXt 解决方案,使我能够将单个字母从行尾移动到行首。
LuaLaTeX 有
https://ctan.org/pkg/luavlna或者https://ctan.org/pkg/impnattypo包
Lua中的算法
答案1
您几乎可以从链接的答案中复制粘贴代码,只需知道将其放在哪里即可。(也适用于 LMTX,至少在 中2020.07.30 01:02
)
\startluacode
function userdata.prevent_single_letter(head)
local cur = head
while cur do
if cur.id == node.id("glyph") then
if cur.prev.id == node.id("glue") and cur.next.id == node.id("glue") then
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,cur,w)
--node.insert_after(head,w,p)
node.insert_after(head,cur,p)
end
end
cur = cur.next
end
return head, true
end
\stopluacode
\mainlanguage[pl]
% Ugh ... don't do this for real
\noheaderandfooterlines
\setuplayout[width=8.2cm]
\setupwhitespace[big]
\starttext
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.
\startluacode
nodes.tasks.appendaction("processors", "before", "userdata.prevent_single_letter")
\stopluacode
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.
\stoptext