Re: Is there any way to automatically control the spacing between Chinese and non-Chinese characters?
I'm curious what Chinese font(s) you are using with ConTeXt? Are they OpenType font,
or TrueType?
October 2, 2024 at 12:56 PM, "黄复雄"
This is a preliminary solution for inserting spaces between Chinese
characters and non-Chinese characters
```ConTeXt
\mainlanguage[cn]
\language[cn]
\setscript[hanzi]
\usetypescriptfile[mscore]
\usebodyfont [mschinese,12pt]
\showglyphs
\startluacode
Thirddata = Thirddata or {}
local glyph_id = nodes.nodecodes.glyph --node.id("glyph")
local node_insertbefore = node.insertbefore
local node_insertafter = node.insertafter
local node_new = node.new
local tex_sp = tex.sp
local function ischinesechar(c)
-- for more ranges:
-- https://wiki.contextgarden.net/List_of_Unicode_blocks
return (c >= 0x04E00 and c <= 0x09FFF)
or (c >= 0x03400 and c <= 0x04DBF)
or (c >= 0x20000 and c <= 0x2A6DF)
end
function Thirddata.processmystuff(head)
local n = head
while n do
if n.id == glyph_id and ischinesechar(n.char) then
local n_prev = n.prev
if n_prev
and n_prev.id == glyph_id
and not ischinesechar(n_prev.char)
then
local glue = node_new("glue")
glue.width = tex_sp("0.25em")
glue.stretch = tex_sp("0.25em")
print("insert space before:", utf8.char(n.char))
head, glue = node_insertbefore(head, n, glue)
end
local n_next = n.next
if n_next
and n_next.id == glyph_id
and not ischinesechar(n_next.char)
then
local glue = node_new("glue")
glue.width = tex_sp("0.25em")
glue.stretch = tex_sp("0.25em")
print("insert space after:", utf8.char(n.char))
head, glue = node_insertafter(head, n, glue)
n = glue.next
end
end
n = n.next
end
return head, done
end
nodes.tasks.appendaction("processors", "after", "Thirddata.processmystuff")
\stopluacode
\starttext
今天出去买菜花了5000元。
新MacBook Pro有15\%的CPU性能提升。
\stoptext
```
On Tue, Oct 1, 2024 at 2:07 PM
wrote: hi,
Is there any way to automatically control the spacing between Chinese and non-Chinese characters?
I noticed that there is a tracker that tracks character types and annotates them.
But I don't know much about lua and the underlying tex.
Any suggestions would be greatly appreciated.
For example, glue is automatically added between Chinese characters and English or numbers.
input: 今天出去买菜花了5000元。
will get: 今天出去买菜花了 5000 元。
----------------------------------
input: 新MacBook Pro有15%的CPU性能提升。
will get: 新 MacBook Pro 有 15% 的 CPU 性能提升。
Muyik
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
I use \usetypescriptfile[mscore], which means using the font
configuration that comes with ConTeXt,
which is suitable for Windows systems. For details, see the
installation file type-imp-mscore.mkiv.
If you set the body font, both OpenType and TrueType are OK.
On Thu, Oct 3, 2024 at 6:42 AM
I'm curious what Chinese font(s) you are using with ConTeXt? Are they OpenType font, or TrueType?
October 2, 2024 at 12:56 PM, "黄复雄"
wrote: This is a preliminary solution for inserting spaces between Chinese
characters and non-Chinese characters
```ConTeXt
\mainlanguage[cn]
\language[cn]
\setscript[hanzi]
\usetypescriptfile[mscore]
\usebodyfont [mschinese,12pt]
\showglyphs
\startluacode
Thirddata = Thirddata or {}
local glyph_id = nodes.nodecodes.glyph --node.id("glyph")
local node_insertbefore = node.insertbefore
local node_insertafter = node.insertafter
local node_new = node.new
local tex_sp = tex.sp
local function ischinesechar(c)
-- for more ranges:
-- https://wiki.contextgarden.net/List_of_Unicode_blocks
return (c >= 0x04E00 and c <= 0x09FFF)
or (c >= 0x03400 and c <= 0x04DBF)
or (c >= 0x20000 and c <= 0x2A6DF)
end
function Thirddata.processmystuff(head)
local n = head
while n do
if n.id == glyph_id and ischinesechar(n.char) then
local n_prev = n.prev
if n_prev
and n_prev.id == glyph_id
and not ischinesechar(n_prev.char)
then
local glue = node_new("glue")
glue.width = tex_sp("0.25em")
glue.stretch = tex_sp("0.25em")
print("insert space before:", utf8.char(n.char))
head, glue = node_insertbefore(head, n, glue)
end
local n_next = n.next
if n_next
and n_next.id == glyph_id
and not ischinesechar(n_next.char)
then
local glue = node_new("glue")
glue.width = tex_sp("0.25em")
glue.stretch = tex_sp("0.25em")
print("insert space after:", utf8.char(n.char))
head, glue = node_insertafter(head, n, glue)
n = glue.next
end
end
n = n.next
end
return head, done
end
nodes.tasks.appendaction("processors", "after", "Thirddata.processmystuff")
\stopluacode
\starttext
今天出去买菜花了5000元。
新MacBook Pro有15\%的CPU性能提升。
\stoptext
```
On Tue, Oct 1, 2024 at 2:07 PM
wrote: hi,
Is there any way to automatically control the spacing between Chinese and non-Chinese characters?
I noticed that there is a tracker that tracks character types and annotates them.
But I don't know much about lua and the underlying tex.
Any suggestions would be greatly appreciated.
For example, glue is automatically added between Chinese characters and English or numbers.
input: 今天出去买菜花了5000元。
will get: 今天出去买菜花了 5000 元。
----------------------------------
input: 新MacBook Pro有15%的CPU性能提升。
will get: 新 MacBook Pro 有 15% 的 CPU 性能提升。
Muyik
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
participants (2)
-
hf@hongfeng.ch
-
黄复雄