[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