[cstex] CSBabel -- problém se znakem "-" v konfiguraci parametru "pdfpages"

Petr Tesarik petr at tesarici.cz
Thu Dec 18 18:23:52 CET 2008


On Thu, Dec 18, 2008 at 05:41:08PM +0100, Petr Tesarik wrote:
> On Thu, Dec 18, 2008 at 05:05:38PM +0100, Petr Tesarik wrote:
> > On Sun, Dec 14, 2008 at 12:44:25PM +0100, Michal Růžička wrote:
> > > Dobrý den,
> > > 
> > > v TeXLive 2008 (kde je již obsažen nový CSBabel) jsem při sazbě LaTeXem
> > > narazil na problém se znakem "-" v kombinaci s balíkem "pdfpages".
> > > Konkrétně následující zdrojový text nefunguje:
> > > 
> > >   \documentclass{article}
> > >   \usepackage[czech]{babel}
> > >   \usepackage[latin2]{inputenc}
> > >   \usepackage[T1]{fontenc}
> > >   \usepackage{pdfpages}
> > > 
> > >   \begin{document}
> > >       Následující stránky dokumentu jsou obsahem souboru
> > >       \emph{sample2e.pdf}.
> > > 
> > >       \includepdf[pages=-]{sample2e.pdf} % Vloží všechny stránky ze
> > >                                          % souboru "sample2e.pdf".
> > >   \end{document}
> > > 
> > > Pokud zakomentuji řádek "\usepackage[czech]{babel}", vše funguje jak
> > > má. Usoudil jsem tedy, že jde o problém CSBabelu.
> > 
> > Ano, je to určitě problém Babelu. Mimochodem, k projevení chyby stačí už
> > výše uvedená preambule, tj. minimální testovací případ je:
> > 
> > \documentclass{article}
> > \usepackage[czech]{babel}
> > \usepackage{pdfpages}
> > 
> > \begin{document}
> > \end{document}
> 
> No, úplně minimální dokument je, zdá se:
> 
> \documentclass{article}
> \usepackage[czech]{babel}
> 
> \AtBeginDocument{\Input{supp-pdf}{}{}}
> 
> \begin{document}
> \end{document}

Hm, tak jsem to našel. Ale po pravdě řečeno moc nevím, co s tím. Babel
definuje aktivní znaky dosti nešikovně:

\active at prefix -\normal at char-

přičemž \active at prefix#1 expanduje na:

\ifx \protect \@typeset at protect
\else \ifx \protect \@unexpandable at protect
  \bbl at afterelse
  \bbl at afterfi
    \noexpand #1\@gobble
  \else
    \bbl at afterfi
    \bbl at afterfi
  \protect #1
  \@gobble
\fi \fi

Jenomže supp-mis.tex si definuje vlastní (zcela nekompatibilní) makro
jménem \protect, a tím se to rozbije.

Varianty jsou tři:

  1. předělat pdfpages (a zbytek toho balíku), aby používal jiné jméno
     než \protect
  2. předělat Babelovské makro tak, aby nespoléhalo na definici \protect
  3. přidat další bastl do supp-mis, který mění i kategorii znaku -

Vidím následující problémy:

1. Myslím, že to jméno makra není náhodné a ConTeXt ho používá právě
   v tom smyslu. Pro LaTeX je to jenom přizpůsobené.
   I tak samozřejmě lze definovat nové makro, které expanduje buď na
   \protect (v ConTeXtu) nebo na tu vlastní definici (v LaTeXu).
   U Hanse Hagena by to mohlo být na jednu stranu průchodné, protože
   by pak mohl vyházet taková krásná makra jako \StartLatexHack a
   \StopLatexHack, na druhou stranu myslím, že by to musel změni na
   příliš mnoha místech a LaTeX ho asi zas tolik nepálí.

2. Nevím jak.

3. To mluví samo za sebe -- až zase někdo zaktivní nějaký další znak,
   tak to může předělávat znova. Je to zkrátka oprava na špatném místě.
   Zato je nejrychlejší.

Nejdřív bych se zkusil zamyslet nad variantou 2, především nad tím,
proč i při deaktivované funkci spojovníku se musí zkoumat definice
\protect.

Petr Tesařík

> 
> Petr Tesařík
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex



More information about the csTeX mailing list