Přeskočit na obsah

LuaTeX

Z Wikiverzity

LuaTeX je rozšířená verze pdfTeX s embedovaným jazykem Lua, podporující OTF (OpenType fonty).

Info

[editovat]

Tutoriály

[editovat]

Instalace

[editovat]

Pokud jsme si třeba v ubuntu nainstalovali sázecí systém texlive, tak jedním z navrhovaných balíků byl i texlive-luatex.

A pokud jsme si nainstalovali balík texlive-lang-czechslovak (já jsem tak kvůli pdfcsplain učinil 2021-09-11, viz Ubuntu/balíky/Kychot/Focal, tak pak se mi balík texlive-luatex nainstaloval automaticky. Není už tudíž nutno cokoli dál řešit. Nainstalovaly se nám soubory:

dpkg -L texlive-luatex

Přečteme si:

/usr/share/doc/texlive-luatex/README.Debian

Manuálové stránky:

man luahbtex
man luatex
... atd:

NAME

luatex, dviluatex, luajittex, texlua, texluac - An extended version of pdfTeX using Lua as an embedded scripting language

Obvyklé volání je:

      luatex [--lua=FILE] [OPTION]...  [TEXNAME[.tex]] [COMMANDS]

Běžně stačí:

      luatex TEXNAME[.tex]

což vytvoří PDF soubor.

Častý důvod pro použití luaTeX je podpora OTF (w: OpenType fonts).

Na začátku se schválně podívám, kolik mám místa na disku:

Souborový systém Velikost Užito Volno Uži% Připojeno do
/dev/nvme0n1p10       33G   30G  1,8G  95% /

Příklad: Pro Projekt: Hesla Jednoty bratrské/2026 jsme si zakoupili výhodnou sadu tří typografických řezů JBW Value Pack, zahrnující rodiny řezů Jannon, Baskerville, Walbaum.

Po zaplacení licence jsme obdrželi soubory:

JBW Value Pack:
   BaskervilleNeo-TextBold.otf
   BaskervilleNeo-TextItalic.otf
   BaskervilleNeo-Text.otf
   JannonSans-Bold.otf
   Jannon10Pro-Bold.otf
   Jannon10Pro-Italic.otf
   Jannon10Pro.otf
   JohnSans-Bold.otf
   WalbaumGrotesk-Bold.otf
   Walbaum10-Bold.otf
   Walbaum10-Italic.otf
   Walbaum10.otf

Tyto soubory musíme umístit do systémové složky:

sudo mkdir -p /usr/share/fonts/opentype/storm
sudo cp *.otf /usr/share/fonts/opentype/storm
sudo chmod 644 /usr/share/fonts/opentype/storm/*.otf

Updatujeme Font Cache:

sudo fc-cache -f -v

Verifikujeme instalaci fontů:

$ fc-list | grep "storm"
/usr/share/fonts/opentype/storm/Walbaum10-Bold.otf: Walbaum 10 Pro:style=Bold
/usr/share/fonts/opentype/storm/Jannon10Pro-Bold.otf: Jannon 10 Pro:style=Bold
/usr/share/fonts/opentype/storm/JohnSans-Bold.otf: John Sans:style=Bold
/usr/share/fonts/opentype/storm/Jannon10Pro.otf: Jannon 10 Pro:style=Regular
/usr/share/fonts/opentype/storm/BaskervilleNeo-TextBold.otf: Baskerville Neo,Baskerville Neo Text:style=Text Bold,Bold
/usr/share/fonts/opentype/storm/BaskervilleNeo-Text.otf: Baskerville Neo,Baskerville Neo Text:style=Text,Regular
/usr/share/fonts/opentype/storm/Jannon10Pro-Italic.otf: Jannon 10 Pro:style=Italic
/usr/share/fonts/opentype/storm/Walbaum10.otf: Walbaum 10 Pro:style=Regular
/usr/share/fonts/opentype/storm/Walbaum10-Italic.otf: Walbaum 10 Pro:style=Italic,Regular
/usr/share/fonts/opentype/storm/JannonSans-Bold.otf: Jannon Sans:style=Bold
/usr/share/fonts/opentype/storm/BaskervilleNeo-TextItalic.otf: Baskerville Neo,Baskerville Neo Text:style=Text Italic,Italic
/usr/share/fonts/opentype/storm/WalbaumGrotesk-Bold.otf: Walbaum Grotesk:style=Bold

a updatujeme LuaTeX font database:

luaotfload-tool --update
  luaotfload | db : Font names database not found, generating new one.
  luaotfload | db : This can take several minutes; please be patient.

A ještě si zkusíme ověřit např.:

luaotfload-tool --find=Jannon10Pro
  luaotfload | resolve : Font "Jannon10Pro" found!
  luaotfload | resolve : Resolved file name "/usr/share/fonts/opentype/storm/Jannon10Pro.otf"

Tak a teď by nám to už mělo (teoreticky) fungovat. Ověříme: Projekt: Hesla Jednoty bratrské/2026#2025-08-04 Pondělí

Nejdřív si to testuji na Heslech 2025. A nefunguje tak, jak by mělo. Jakým příkazem mám to PDF generovat? Zkouším:

luatex hesla25.tex

Jenže to chcípne na řádku:

\chyph

tj. české dělení slov.

Dříve jsem to spouštěl příkazem:

pdfcsplain hesla25.tex

Takže teď by to mělo jít příkazem:

luacsplain

Ale takový příkaz nemám.

Možná je problém v tom, že jsem původně instaloval balík texlive-lang-czechslovak přes apt-get a teď je nutné vše instalovat přes tlmgr = the native TeX Live Manager?

tak ho zase odinstaluji:

sudo apt-get purge texlive-lang-czechslovak

Ale když se předtím s tímhle balíkem automaticky nainstalovala závislost na luatech, mám ho tam ještě?

tlmgr list --only-installed

  (running on Debian, switching to user mode!)
  TLPDB: not a directory, not loading: /home/petr/texmf
  tlmgr: running in usermode, did you call `tlmgr init-usertree'?

Tak zkusím:

sudo tlmgr list --only-installed

   [sudo] heslo pro petr: 
   (running on Debian, switching to user mode!)
   TLPDB: not a directory, not loading: /root/texmf
   tlmgr: running in usermode, did you call `tlmgr init-usertree'?

sudo tlmgr update --self --all

  (running on Debian, switching to user mode!)
  TLPDB: not a directory, not loading: /root/texmf
  tlmgr: running in usermode, did you call `tlmgr init-usertree'?

Problém bude asi v něčem jiném. Nainstaluji opět ten československý balík přes apt-get:

 sudo apt-get install texlive-lang-czechoslovak
Načítají se seznamy balíků… Hotovo
Vytváří se strom závislostí       
Načítají se stavové informace… Hotovo
Následující NOVÉ balíky budou nainstalovány:
  texlive-lang-czechslovak
0 aktualizováno, 1 nově instalováno, 0 k odstranění a 1 neaktualizováno.
Nutno stáhnout 10,9 MB archivů.
Po této operaci bude na disku použito dalších 14,9 MB.
Stahuje se:1 http://cz.archive.ubuntu.com/ubuntu focal/universe amd64 texlive-lang-czechslovak all 2019.20200218-1 [10,9 MB]
Staženo 10,9 MB za 7s (1 485 kB/s)                                                                                                                                        
Vybírá se dosud nevybraný balík texlive-lang-czechslovak.
(Načítá se databáze … nyní je nainstalováno 297985 souborů a adresářů.)
Připravuje se nahrazení …/texlive-lang-czechslovak_2019.20200218-1_all.deb …
Rozbaluje se texlive-lang-czechslovak (2019.20200218-1) …
Nastavuje se balík texlive-lang-czechslovak (2019.20200218-1) …
Zpracovávají se spouštěče pro balík tex-common (6.13) …
Running mktexlsr. This may take some time... done.
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
        This may take some time... done.
Zpracovávají se spouštěče pro balík man-db (2.9.1-1) …

A ještě se přes apt-get podívám, jak to vypadá s tím luatex:

sudo apt-get install texlive-luatex
Načítají se seznamy balíků… Hotovo
Vytváří se strom závislostí       
Načítají se stavové informace… Hotovo
texlive-luatex je již nejnovější verze (2019.20200218-1).
texlive-luatex nastaven jako instalovaný ručně.
Následující balíky byly nainstalovány automaticky a již nejsou potřeba:
  texlive-lang-english texlive-lang-european texlive-lang-german texlive-lang-italian texlive-lang-polish texlive-lang-spanish
Pro jejich odstranění použijte „sudo apt autoremove“.
0 aktualizováno, 0 nově instalováno, 0 k odstranění a 1 neaktualizováno.

Asi ten příkaz musím vygenerovat:

 sudo fmtutil-sys --byfmt luacsplain
fmtutil: fmtutil is using the following fmtutil.cnf files (in precedence order):
fmtutil:   /usr/share/texmf/web2c/fmtutil.cnf
fmtutil:   /usr/share/texlive/texmf-dist/web2c/fmtutil.cnf
fmtutil: fmtutil is using the following fmtutil.cnf file for writing changes:
fmtutil:   /etc/texmf/web2c/fmtutil.cnf
fmtutil [INFO]: writing formats under /var/lib/texmf/web2c
fmtutil [INFO]: --- remaking luacsplain with luatex
fmtutil: running `luatex -ini   -jobname=luacsplain -progname=luacsplain -etex csplain.ini' ...
This is LuaTeX, Version 1.10.0 (TeX Live 2019/Debian)  (INITEX)
 restricted system commands enabled.
(/usr/share/texlive/texmf-dist/tex/csplain/base/csplain.ini
(/usr/share/texlive/texmf-dist/tex/csplain/base/csfonts.tex)
(/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/usr/share/texlive/texmf-dist/tex/generic/hyphen/hyphen.tex))
(/usr/share/texlive/texmf-dist/tex/csplain/base/csfontsm.tex)
(/usr/share/texlive/texmf-dist/tex/generic/config/luatexiniconfig.tex)
(/usr/share/texlive/texmf-dist/tex/generic/luatex85/luatex85.sty)
(/usr/share/texlive/texmf-dist/tex/csplain/base/etex-mac.tex)
(/usr/share/texlive/texmf-dist/tex/csplain/base/hyphen.lan
(/usr/share/texlive/texmf-dist/tex/csplain/base/lua-hyphen.lan
(/usr/share/texlive/texmf-dist/tex/csplain/base/uni-lcuc.tex
Setting lccodes and uccodes for Unicode characters.)
Language hyph.patterns ready to load: en(USpreloaded) enus(usenglishmax) engb(u
kenglish) it(italian) ia(interlingua) id(indonesian) cs(czech) sk(slovak) de(ng
erman) fr(french) pl(polish) cy(welsh) da(danish) es(spanish) sl(slovenian) fi(
finnish) hy(hungarian) tr(turkish) et(estoniak) eu(basque) ga(irish) nb(bokmal)
 nn(nynorsk) nl(dutch) pt(portuguese) ro(romanian) hr(croatian) zh(pinyin) is(i
celandic) hsb(uppersorbian) af(afrikaans) gl(galician) kmr(kurmanji) tk(turkmen
) la(latin) lac(classiclatin) lal(liturgicallatin) elm(monogreek) elp(greek) gr
c(ancientgreek) ca(catalan) cop(coptic) mn(mongolian) sa(sanskrit) ru(russian) 
uk(ukrainian) hy(armenian) as(assamese) hi(hindi) kn(kannada) lv(latvian) lt(li
thuanian) ml(malayalam) mr(marathi) or(oriya) pa(panjabi) ta(tamil) te(telugu).
 Use \<shortname>lang to initialize language, \cslang for example))
(/usr/share/texlive/texmf-dist/tex/csplain/base/plaina4.tex
\hsize=159.2 mm \vsize=239.2 mm)
(/usr/share/texlive/texmf-dist/tex/csplain/base/ucode.tex
Font encoding set to Unicode.) jobname=pdf*, PDF output initialised.
(/var/lib/texmf/tex/generic/config/pdftexconfig.tex))
Beginning to dump on file luacsplain.fmt
 (format=luacsplain 2025.8.4)
3573 strings using 11969 bytes
65067 memory locations dumped; current usage is 149&10458
2070 multiletter control sequences
\font\nullfont=nullfont
\font\tenrm=csr10
\font\sevenrm=csr7
\font\fiverm=csr5
\font\teni=cmmi10
\font\seveni=cmmi7
\font\fivei=cmmi5
\font\tensy=cmsy10
\font\sevensy=cmsy7
\font\fivesy=cmsy5
\font\tenex=cmex10
\font\tenbf=csbx10
\font\sevenbf=csbx7
\font\fivebf=csbx5
\font\tentt=cstt10
\font\tensl=cssl10
\font\tenit=csti10
\font\tenbi=csbxti10
17 preloaded fonts
warning  (pdf backend): no pages of output.
Transcript written on luacsplain.log.
fmtutil [INFO]: log file copied to: /var/lib/texmf/web2c/luatex/luacsplain.log
fmtutil [INFO]: /var/lib/texmf/web2c/luatex/luacsplain.fmt installed.
fmtutil [INFO]: disabled formats: 1
fmtutil [INFO]: successfully rebuilt formats: 1
fmtutil [INFO]: not selected formats: 22
fmtutil [INFO]: total formats: 24
fmtutil [INFO]: exiting with status 0

Ale stejně ten příkaz luacsplain v systému nemám.

Tady csplain čeština a slovenština v plain TeXu Petr Olšák píše:

CSplain spolupracuje s klasickým TeXem, pdfTeXem, LuaTeXem nebo XeTeXem. Poslední dva TeXové programy interně pracují v Unicode (Unicode-TeX) a jste-li nový uživatel, doporučujeme použít jeden z nich, lépe LuaTeX. CSplain se v takovém případě spouští pomocí příkazu

  luacsplain dokument    (...nebo:  luatex -fmt pdfcsplain dokument)

Takže zkusím tu druhou možnost:

luatex -fmt pdfcsplain hesla25.tex

a už to vypadá, že to funguje.