Vlastní fonty v La­TeXu

Te­nhle člá­nek o sá­zení v La­texu (Lua­texu, Xe­texu, Texu, wha­te­ver) píši z po­sice člo­věka, který sice už pár věcí na­sá­zel a byl nu­cen pár pro­blémů ře­šit, ale roz­hodně se ne­po­va­žuje za od­bor­níka (spíše za znač­ného laika, kte­rému dost věcí okolo TeXu při­jde jako temná magie). Proto budu velmi rád, když mě na ne­přes­nosti upo­zor­níte.

Nuže, úkol byl ná­sle­du­jící: vy­sá­zet pre­sen­taci na před­mět o staré češ­tině, která bude ob­sa­ho­vat texty ve staré češ­tině. Bylo mi jasné, že to ne­pů­jde asi jen tak, pro­tože se v tex­tech vy­sky­tují znaky jako ь, ǫ a ʃ. Ale šlo to.

TL;DR:

\documentclass{beamer}
\usefonttheme{serif}
\usepackage{fontspec}
\setmainfont{ubuntu}
\setsansfont{code2000}
\begin{document}
  \begin{frame}
    \item akjdnak f 2438г0 ěčá{\sf ěýhčýáí}šě лфгк ь, {\sf ǫ a ʃ} 
  \end{frame}
\end{document}

Po­kud ne­víte, proč co kde jak, čtěte dál.

Vzhle­dem k tomu, že mě zkou­mání této pro­ble­ma­tiky stálo ně­ko­lik ho­din, po­ku­sím se o po­pis pra­cov­ního po­stupu, který ge­ne­ra­cím příš­tím snad usnadní tro­chu práce.

Nej­prve se vy­kaš­lete na La­TeX a jeho pdfcslatex a na­in­sta­lujte si Lua­tex, ten vám totiž umožní do zdro­jo­vého sou­boru vklá­dat ob­skurní znaky jak jsou. Kom­pi­lo­vat do­ku­menty teď bu­dete přes lualatex.

A teď ta dů­le­žitá obecná rada. La­TeX evi­dentne ne­umí ja­ké­ko­liv sub­sti­tuce fontů, jako to dělá třeba MS Word, když po­u­ží­váte font, který nemá všechny znaky, které v textu máte. Proto je velmi dů­le­žité, abyste ve svém te­xov­ském do­ku­mentu po­u­ží­vali font, který ide­álně má všechny znaky, které po­tře­bu­jete. Zá­kladní font v mo­dulu Be­a­mer (pre­sen­tace) toho moc nemá (na­ra­zil jsem už u jerů vza­tých z azbuky). Zá­kla­dem ce­lého sna­žení je tedy na­jít font, který ob­sa­huje všechny znaky, které po­tře­bu­jete. Po­kud se vám něco ta­ko­vého po­da­řilo, do­po­ru­čuji si ušet­řit zdraví a pře­su­nout se do sekce Level:Foolproof. Až po­kud vám to ne­bude fun­go­vat (zjis­títe, že font ve sku­teč­nosti nemá všechno), pře­suňte se do Level:Insane.

Po­kud font, kte­rým chcete mít do­ku­ment vy­sá­zen, ne­ob­sa­huje znaky, které po­tře­bu­jete, ne­zbývá, než vy­sá­zet jen ty kon­krétní znaky fon­tem, který je ob­sa­huje. Tady se váš osud dělí na ten, kde si mírně za­dě­láte sys­tém dal­ším fon­tem, a ten, kde se upí­šete temné magii. Cho­ose wi­sely.

Level:Insane

Za­čnu tou slo­ži­tější me­to­dou, tedy pří­pad, že font v sys­tému na­in­sta­lo­vaný mít ne­chcete nebo ne­mů­žete, a přesto ho v TeXu po­tře­bu­jete po­u­žít. Tady na­stu­puje ona temná magie, které ab­so­lutně ne­ro­zu­mím, ale fun­go­vala mi. Ná­vod v ori­gi­nále zde.

Co bu­dete po­tře­bo­vat:

  • Font typu Tru­e­Type (*.ttf). Udě­lejte si od něj ko­pii po­jme­no­va­nou custom.ttf (ano, ten ná­zev je dů­le­žitý, s ji­ným ten skritp fun­go­vat ne­bude, po­kud si to ne­pře­pí­šete) a umis­těte ji do své složky, kde vy­tvá­říte svůj dokument/presentaci/whatever.
  • Pro­gram ttf2tfm (je dis­tri­bu­o­ván s La­teXem, takže byste ho snad měli mít)
  • Sou­bory T1-WGL4.enc (stáh­nout) a t1custom.fd (stáh­nout).

Co mu­síte udě­lat:

V ter­mi­nálu vlezte do složky se svým do­ku­men­tem a za­dejte:

ttf2tfm custom.ttf -p T1-WGL4.enc

Do zá­hlaví svého zdro­jo­vého sou­boru v TeXu vložte:

\newcommand\customfont[1]{{\usefont{T1}{custom}{m}{n}#1}}

Vždy, když bu­dete chtít třeba blah blah ve vlast­ním fontu, po­u­žijte:

\customfont{blah blah}

Level:Foolproof

A teď ten způ­sob, který vy­ža­duje, abyste font měli na­in­sta­lo­vaný v sys­tému, ale možná po jeho apli­kaci bu­dete stále dis­po­no­vat ale­spoň zbyt­ko­vými frag­menty svého ně­kdej­šího ro­zumu.

Poté, co si na­in­sta­lu­jete po­třebné fonty do OS, zjis­těte, jak se pro apli­kace jme­nují (nej­jed­no­duší je otevřít ně­jaký rich-textový edi­tor a v něm se po­dí­vat, jak se ten font hlásí). Po­tom ve svém te­xov­ském zdroji po­u­žijte ba­lí­ček font­spec (\usepackage{fontspec}). Po­kud po­u­ží­váte Be­a­mer na slidy, bu­dete ho muset pře­svěd­čit, že chce po­u­ží­vat se­ri­fové písmo, tedy mu říci \usethemefont{serif}. Don’t ask me why.

Teď, abyste mohli v pre­sen­taci po­u­žít více pí­sem, bu­dete muset jedno na­sta­vit jako main (to, které chcete po­u­ží­vat víc, tedy jako hlavní) a jedno např. jako sans. Tzn. např. \setmainfont{Droid Sans}setsansfont{code2000}. Teď se vám slidy bu­dou sá­zet Dro­i­dem, a když na­ra­zíte na pís­menko, které Droid ne­umí, řek­nete TeXu, že po­u­ží­váte sans, tedy {\sf text fontem code2000}. Jed­no­du­ché, že? A pro jis­totu ještě jed­nou ukáz­kový kód:

\documentclass{beamer}
\usefonttheme{serif}
\usepackage{fontspec}
\setmainfont{ubuntu}
\setsansfont{code2000}
\begin{document}
  \begin{frame}
    \item akjdnak f 2438г0 ěčá{\sf ěýhčýáí}šě лфгк ь, {\sf ǫ a ʃ} 
  \end{frame}
\end{document}

Leave a Reply

Your email address will not be published. Required fields are marked *