luaTeX to najlepsza wersja TeXa bo ma tę przewagę nad pdfTeXem, że natywnie używa Unicode + potrafi korzystać z fontów systemowych. Jak się używa LaTeXa, to na tym można zakończyć. Jak ktoś chce plain-TeX (czyli zapewne kiedyś używał MeXa), to potrzebuje jako minimum: format z polskimi regułami przenoszenia wyrazów, no i możliwość dołączania rysunków.
W luaTeXu robi się to następująco (TeXlive):
Należy odszukać plik etex.src
(np. /usr/local/texlive/2022/texmf-dist/tex/luatex/hyph-utf8/etex.src
). Plik ten powinien zawierać wiersz:
\addlanguage {USenglish}{hyphen}{}{2}{3}%
Po tym wierszu należy dodać
\addlanguage{polish}{loadhyph-pl.tex}{}{2}{2}
Teraz należy wygenerować format:
luatex -ini luatex.tex ## powstał plik luatex.fmt; który kopiuję ## do katalogu z innymi formatami
Polskie reguły są włączane poleceniem:
\uselanguage{polish}
Fonty można deklarować tak, jak w poniższym przykładzie, w którym zakładamy skład fontem ChaparralPro
\input luaotfload.sty %% https://www.wfonts.com/font/chaparral-pro %% Potrzebujemy `family name` ale ChaparralPro też działa (why?) %% otfinfo -a FONT wypisze family name \def\MainSFont{name:Chaparral Pro} \font\rm = "\MainSFont:+tlig" at 9.9pt \font\it = "\MainSFont/I:+tlig" at 9.9pt \font\bf = "\MainSFont/B:+tlig" at 9.9pt \font\bi = "\MainSFont/BI:+tlig" at 9.9pt %% \bf włącza odmianę grubą \it kursywę jak to plainie...
Zwróćmy uwagę, że odmiana jest deklarowana jako /X
po nazwie kroju; potem po dwukropku (opcjonalnie) deklaruje się font features. Jako minimum warto dodać tlig
, co włączy ligatury TeXowe (takie jak --
zamiast myślnika.) Inne użyteczne features, to smcp
oraz onum
:
%% Caps/smallcaps \font\sc = "\MainSFont:+tlig,+smcp" at 9.9pt %% Old style numbers \font\sco = "\MainSFont:+tlig,+smcp,+onum" at 9.9pt
Dołączanie rysunków/kolorowanie/obracanie:
%% zPlainowany LaTeXowy pakiet graphicx: \input graphicx.tex \includegraphics[width=.9\hsize]{plik.png} %% zPlainowany LaTeXowy pakiet color: \input color.tex \textcolor{red}{bbb} \colorbox{green}{one two} %% obracanie: \rotatebox{90}{\colorbox{blue}{\textcolor{yellow}{Stand with Ukraine}}} %% skalowanie %% x-przeskaluj na 40% \hsize \resizebox{.4\hsize}{!}{Stand with Ukraine} %% xy-przeskaluj na 40% \resizebox{.4\hsize}{2cm}{Stand with Ukraine} %% Powiększ oryginał 2 razy \scalebox{2}{Stand with Ukraine}
No i tyle. Podstawowa funkcjonalność jest. Z MeXa zostały tylko wzorce przenoszenia. Reszta stała się zbędna, więc nie ma czegoś takiego jak luaMeX. Postęp jest nieubłaganyn nawet w świecie TeXa...
Kompletny mini-przykład
%% -*- coding: utf-8 -*- %% należy kompilować luaTeXem \input luaotfload.sty \input graphicx.tex \input color.tex %% \uselanguage{polish} %%% \def\MainSFont{Iwona} \font\rm = "\MainSFont:+tlig;+onum" at 9.9pt \font\it = "\MainSFont/I:+tlig;+onum" at 9.9pt \font\bf = "\MainSFont/B:+tlig;+onum" at 9.9pt \font\bi = "\MainSFont/BI:+tlig;+onum" at 9.9pt %% Small caps \font\sc = "\MainSFont:+tlig;+smcp" at 9.9pt %% Old style numbers \font\sco = "\MainSFont:+tlig;+smcp;+onum" at 9.9pt \def\SwUA{\colorbox{blue}{\textcolor{yellow}{Stand with Ukraine}}} \def\dig{0123--456---789} \rightskip0pt plus 1fil \nopagenumbers \rm \SwUA \dig {\bf \SwUA \dig } {\it \SwUA \dig } {\sc \SwUA \dig } vs {\sco \SwUA \dig } \rotatebox{90}{\resizebox{.4\hsize}{!}{\SwUA}} \scalebox{2}{\SwUA} \bye
i wynik
UWAGA: uważny czytelnik zauważy, że nie do końca jest to co miało być (small caps zawsze jest z OldStyleNumbers i nie idzie tego wyłączyć), bo niektóre font features są ignorowane. Z fontem Chaparral jest jeszcze gorzej: nawet smcp
jest ignorowane.
Żeby było śmieszniej po usunięciu \input luaotfload.sty
i kompilacji xeTeXem jest OK. Dalsze testy można streścić następująco: niektóre fonty nie są poprawnie deklarowane; deklarowanie tych samych fontów w LaTeXu daje poprawne rezultaty (ale z użyciem fontspec
a); przetwarzanie xeTeXem też daje poprawne rezultaty. Na moje coś jest spieprzone w plainowej wersji luaotfload
, ale konkretnie co to nie ustaliłem albo fontspec
jest bardziej cwany i lepiej deklaruje fonty.
Relewantna literatura to dokumentacja do dwóch pakietów: https://www.ctan.org/pkg/fontspec
oraz https://www.ctan.org/pkg/luaotfload
.
Dopisane 23 czerwca 2022 (wieczorem): Pytanie zadałem na githubie (https://github.com/latex3/luaotfload/issues/229) i już wiem co było nie tak. Trzeba było dodać mode=node;script=latn
, tj. na przykład:
\font\sc = "\MainSFont:mode=node;script=latn;+tlig;+smcp" at 9.9pt
You can check in the log how exactly fontspec specifies the font and copy that in your plaintex document.
Warto jest zapoznać się z tak ciekawymi informacjami.
OdpowiedzUsuń