bersama catatan peribadi & teknikalnya.

Perkembangan Terbaru ConTeXt

Enjin LUAMETATEX


geeky stuff
#context | #lmtx

PRAGMA ADE mengumumkan dan sudah pun mengeluarkan enjin terbaru bagi ConTeXt yang dinamakan sebagai LUAMETATEX. LuaMetaTEX ini terkandung di dalam versi ConTeXt yang baru bernama LMTX.

Memetik pengenalan mengenai LuaMetaTEX melalui pautan LuaMetaTEX Reference Manual yang tidak akan saya terjemahkan ke dalam Bahasa Melayu ini,

(Perenggan ke-2) "... we could move on with a follow up tagged MetaTEX, a name we already had in mind for a while, but as Lua is an important component, it got expanded to LuaMetaTEX. This follow up is a lightweight companion to LuaTEX that will be maintained alongside."
...

(Perenggan ke-3 terakhir) “For ConTEXt users the LuaMetaTEX engine will become the default. As mentioned, the ConTEXt variant for this engine is tagged LMTX. The pair can be used in production, just as with LuaTEX and MkIV. In fact, most users will probably not really notice the difference. In some cases there will be a drop in performance, due to more work being delegated to Lua, but on the average performance is much be better, due to some changes below the hood of the engine. Memory consumption is also less. The timeline of development is roughly: from 2018 upto 2020 engine development, 2019 upto 2021 the stepwise code split between MkIV and LMTX, while in 2021 and 2022 we will (mostly) freeze MkIV and LMTX will be the default.”


Dengan adanya perubahan ini, saya putuskan untuk menyahpasang pakej texlive yang disediakan di dalam repositori rasmi Arch Linux. Sebaliknya saya dapatkan pemasangan pakej (stand alone) ConTeXt LMTX secara langsung yang diperolehi dari laman web rasmi PRAGMA ADE. Juga pemasangan secara manual bagi pakej TeX Live yang diperolehi dari laman web TeX Users Group (TUG). Pemasangan adalah melalui pengguna biasa dengan penempatan di dalam $HOME.

Kenapa? Kerana:-

  1. Pakej texlive dari repo Arch turut memasang pakej context yang mengandungi versi MkIV secara lalai. Paksaan untuk menggunakan enjin LuaMetaTEX dengan opsyen --lmtx tidak mendatangkan hasil. Saya boleh memilih untuk tidak memasang pakej context melalui pemasang upstream.
  2. Timbulnya konflik di antara pakej ConTeXt LMTX dan TeX Live.
  3. Konflik yang memaparkan ralat "unknown script 'mtx-context.lua' or 'mtx-mtx-context.lua'" apabila melaksanakan 'context --luatex filename' berjaya diselesaikan.

    Cara saya adalah dengan menyusun semula laluan-laluan ke binari pakej melalui export PATH di dalam fail .zshrc. Saya tetapkan laluan kepada binari pakej TeX Live dan yang lain-lainnya (termasuk laluan kepada pautan simbolik [symbolic links / symlinks]) selepas ConTeXt LMTX.

    Kaedah ini memaksa sistem untuk mencari mtxrun dari sumber bin ConTeXt LMTX terlebih dahulu, sebelum mencarinya di dalam lokasi-lokasi yang menempatkan bin TeX Live, lebih-lebih lagi kalau laluannya ditetapkan lebih awal daripada laluan ke bin context.


Siap pemasangan, semakan versi ConTeXt (yang saya pasang di dalam direktori $HOME/context) mengeluarkan output berikut:-
1$ context --version
2mtx-context     | ConTeXt Process Management 1.04
3mtx-context     |
4mtx-context     | main context file: $HOME/context/tex/texmf-context/tex/context/base/mkiv/context.mkiv
5mtx-context     | current version: 2021.07.23 18:55
6mtx-context     | main context file: $HOME/context/tex/texmf-context/tex/context/base/mkxl/context.mkxl
7mtx-context     | current version: 2021.07.23 18:55

Manakala binari pakej yang terpasang pula ialah seperti berikut:-
1$ ls $HOME/context/tex/texmf-linux-64/bin
2context  context.lua  luametatex  luatex  mtxrun  mtxrun.lua

Sebagaimana yang telah dijelaskan oleh PRAGMA ADE, LuaTEX juga disokong oleh versi baru ConTeXt yakni LMTX ini.

ESKPERIMEN:

Benar bahawa terdapat keadaan yang memerlukan pengguna memanfaatkan LuaTEX berbanding LuaMetaTEX.

Uji kaji yang saya jalankan sendiri melibatkan penggunaan MetaPost bagi Warna. Menggunakan dokumentasi colors-mkiv yang disediakan oleh PRAGMA ADE sebagai rujukan, saya mencedok sebahagian kod yang berikut:-

\definespotcolor [spotone] [darkred] [p=1]
\definespotcolor [spottwo] [darkgreen] [p=1]

\definemultitonecolor
    [whatever]
    [spotone=.5,spottwo=.5]
    [b=.5]
\definemultitonecolor
    [whatever-t]
    [spotone=.5,spottwo=.5]
    [b=.5]
    [a=1,t=.5]

Kemudian, di bawah topik MetaFun, saya ciplak pula kod contoh yang diberi:-
\title{2) MetaFun}
\blank[2*big]

\dontleavehmode
\startMPcode
fill fullcircle scaled 3cm withcolor
    .5 * spotcolor("whatever",(.3,.4,.5)) ;
fill fullcircle scaled 2cm withcolor
        spotcolor("whatever",(.3,.4,.5)) ;
fill fullcircle scaled 1cm withcolor
        spotcolor("whatever",(.3,.4,.5)/2) ;
\stopMPcode
\hskip.5cm
\startMPcode
fill fullcircle scaled 3cm withcolor
    .5 * multitonecolor("whatever",(.3,.4,.5),(.5,.3,.4)) ;
fill fullcircle scaled 2cm withcolor
        multitonecolor("whatever",(.3,.4,.5),(.5,.3,.4)) ;
fill fullcircle scaled 1cm withcolor
        multitonecolor("whatever",(.3,.4,.5)/2,(.5,.3,.4)/2) ;
\stopMPcode
*

PERBEZAAN PENJANAAN DAN OUTPUT DI ANTARA KEDUA-DUA ENJIN:

  1. Baris perintah:
    context filename
  2. Sebahagian baris log output:
    system          > ConTeXt  ver: 2021.07.23 18:55 LMTX  fmt: 2021.7.25  int: english/english
    mkiv lua stats  > font engine: otf 3.118, afm 1.513, tfm 1.000, 9 instances, 3 shared in backend, 3 common vectors, 0 common hashes, load time 0.239 seconds 
    mkiv lua stats  > used engine: luametatex version: 2.0916, functionality level: 20210630, format id: 587, compiler: gcc
    mkiv lua stats  > lua properties: engine: lua 5.4, used memory: 52 MB, ctx: 49 MB, max: 49 MB, symbol mask: utf (τεχ)
    mkiv lua stats  > runtime: 0.803 seconds, 1 processed pages, 1 shipped pages, 1.245 pages/second
  3. Pengeluaran PDF:
  4. Dapatan: ~ Walaupun penggunaan memori adalah lebih rendah dan kelajuan pelaksanaan adalah lebih pantas, imej bulatan pertama TIDAK DIHASILKAN dengan tepat.
  1. Baris perintah:
    context --luatex filename
  2. Sebahagian baris log output:
    system          > ConTeXt  ver: 2021.07.23 18:55 MKIV  fmt: 2021.7.25  int: english/english
    mkiv lua stats  > font engine: otf 3.118, afm 1.513, tfm 1.000, 8 instances, 3 shared in backend, 3 common vectors, 0 common hashes, load time 0.296 seconds 
    mkiv lua stats  > used engine: luatex version: 1.13, functionality level: 7420, banner: this is luatex, version 1.13.0 (tex live 2021)
    mkiv lua stats  > lua properties: engine: lua 5.3, used memory: 102 MB, ctx: 102 MB, max: unknown MB, hash chars: min(64,40), symbol mask: utf (τεχ)
    mkiv lua stats  > runtime: 0.847 seconds, 1 processed pages, 1 shipped pages, 1.181 pages/second
  3. Pengeluaran PDF:
  4. Dapatan: ~ Walaupun penggunaan memori adalah lebih tinggi dan kelajuan pelaksanaan adalah lebih perlahan, imej bulatan pertama DIHASILKAN dengan tepat.
ConTeXt LMTX yang telah dikemaskini kepada versi terbaru bertarikh 10 Ogos 2021 menyaksikan perubahan buat enjin LuaMetaTEX. Output PDF oleh enjin LuaMetaTEX bagi kod MetaPost warna di atas kini adalah sama dengan output PDF oleh enjin LuaTEX.

KEMAS KINI PAKEJ DISTRIBUSI TEX


Memandangkan pemasangan dibuat secara manual, kedua-dua distribusi TeX ini perlu dikemaskini dengan cara manual jugalah. Kekerapan… pandai-pandailah nak ingat sendiri.

Kemas kini ConTeXt LMTX:-
  • cd ke dalam direktorinya dan jalankan semula skrip; ./install.sh
Kemas kini TeX Live:-
  • untuk pakej tlmgr itu sendiri; tlmgr update --self
  • untuk pakej-pakej TeX Live; tlmgr update --all

MEMASANG MODUL LUAR BAGI CONTEXT LMTX


Simpan fail modul di dalam direktori $HOME/context/tex/texmf-modules.

Kemudian jana semula ConTeXt LMTX dengan:-
  • context --generate
    ATAU
  • mtxrun --generate
  • context --make

Sekian, terima kasih.

Kali terakhir dikemaskini:


Top