[cstex] Zúžení textu v nadpisu při finální úpravě
Jan Sustek
Jan.Sustek at seznam.cz
Sat May 18 20:08:17 CEST 2019
Ahoj Jardo,
ukážu řešení v pdfLaTeXu, které ovšem využívá pouze prostředky jádra
pdfTeXu, tak by snad mělo fungovat i v LuaLaTeXu. Myšlenkou je předefinovat
makro na sazbu sekcí, což se projeví pouze při sazbě a dále to neovlivní
text v obsahu. Ukážu to konkrétně na sazbě sekce při použití classu article
(v případě jiného classu a jiné definice makra pro sekce se to změní
analogicky). V souboru article.sty je definováno
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
Pokud chceš mikrotypograficky smrštit nadpis, pak nastav nadpisový font, ať
se umí smršťovat, a při sazbě nadpisu nastav, ať se smršťuje. Konkrétně
například ve svém dokumentu definuj
\makeatletter
{\normalfont\Large\bfseries \pdffontexpand\font 0 100 10 autoexpand }
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries \
pdfadjustspacing2 }}
\makeatother
- Nejdříve se lokálně přepne do fontu pro sazbu sekce (ať nemusíš složitě
zjišťovat, co za konkrétní fontový soubor se načítá) a ten se nastaví, ať se
umí smršťovat. Načtení fontu je vždy globální, takže ta schopnost smršťování
bude globální. Hodnota 0 znamená, že se font nebude roztahovat, hodnota 100,
že se může smrštit o 100 promile (tj. na 90 procent normální šířky)
(doporučuji max 40 promile), hodnota 10, že jsou různě zúžené varianty fontu
diskretizovány s krokem 10 promile.
- Na posledním řádku se pak nastaví, že se má smršťování fontu použít při
sazbě nadpisu. Toto nastavení je vždy lokální a neovlivní okolní text.
Osobně bych to ještě vylepšil následovně.
\makeatletter
{\normalfont\Large\bfseries \pdffontexpand\font 0 100 10 autoexpand }
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries \rightskip0
ptplus1fil \hyphenpenalty10000 \pdfadjustspacing2 \linepenalty1000 }}
\makeatother
- Nastavím pružný pravý okraj pomocí \rightskip. Implicitně totiž okraj v
nadpisu nepruží a text víceřádkového nadpisu se nehezky zarovná do bloku s
velkými mezislovními mezerami. Takto bude nadpis vysázen na praporek.
- \hyphenpenalty10000 zakáže dělit slova v nadpisu, což taky nevypadá hezky.
A jelikož máme pružný okraj, tak to nevadí.
- Velká hodnota \linepenalty způsobí, že algoritmus řádkového zlomu bude
preferovat méněřádkové nadpisy za cenu drobného násilí na fontu před
víceřádkovými nadpisy s normálním fontem.
Pokud chceš řešení s přečnívajícím nadpisem, tak namísto předchozího použij
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries\rightskip0pt
minus1cm }}
případně v podobně vylepšené verzi
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries\rightskip0
ptplus1filminus1cm \hyphenpenalty10000 \linepenalty1000 }}
- Záporná pružnost \rightskip znamená, že nadpisu dovolíme přečnívat
maximálně 1cm do pravého okraje.
Obě výše uvedená řešení samozřejmě můžeš dle libosti nakombinovat. Tak snad
jsem Ti pomohl a bude to fungovat i v tom LuaLaTeXu.
Měj se hezky.
Honza
---------- Původní e-mail ----------
Od: Jaroslav Hajtmar <hajtmar at gyza.cz>
Komu: Czech and Slovak TeX-related mailing list <csTeX at cs.felk.cvut.cz>
Datum: 18. 5. 2019 11:33:02
Předmět: [cstex] Zúžení textu v nadpisu při finální úpravě
"Dobrý den.
Dělám finální úpravy dokumentu a na několika místech v textu dojde k
zalomení nadpisu “jen kvůli jednomu písmenku”. Lze nějak dosáhnout
nepatrného “smrštění” vysázeného textu, když nelze nějak rozumně modifikovat
text nadpisu? Zkoušel jsem nějaké mikrotypografické balíčky, ale vzhledem k
tomu, že překládám dokument LuaLaTeXem, tak se mi žádné z řešení nepodařilo
zprovoznit.
Možná by stačilo rozšířit nepatrně jen daný nadpisový řádek, bez ohledu na
okraj stránky, vizuálně by to bylo pro mne lepší, než to zalomení a
ponechání jednoho slova nadpisu na dalším řádku...
Díky za tipy.
Jarda Hajtmar
_______________________________________________
csTeX mailing list
csTeX at cs.felk.cvut.cz
https://lists.felk.cvut.cz/mailman/listinfo/cstex
"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20190518/56e36d26/attachment-0001.html>
More information about the csTeX
mailing list