ConTeXt 中单字母单词后的硬空格

ConTeXt 中单字母单词后的硬空格

我正在寻找一个 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

红色省略号是后来添加的 在此处输入图片描述

相关内容