setpdfcolor z promenne

Jaromír Kuben kuben at scova.vabo.cz
Fri Apr 16 09:17:57 CEST 2004


Vlastimil Ott napsal(a):

> Jaromír Kuben wrote:
>
> Dobry den,
>
>> A proc tam davate to \the?
>
>
> Protoze kdyz napisu to, co jste mi radil a co jsem uz zkousel jako 
> prvni vec, dockam se hlaseni
>
> Error (1101876): Unknown operator '\starabarva'
> Error (1101876): Too few (0) args to 'k' operator

To je ovsem hlaseni Acrobatu, ze ano?

>
>> \def\pdfsetcolor#1{\pdfliteral{#1 k}}
>> \def\starabarva{1 0 0 1}
>
>
> Pokud se snazim predefinovat \starabarva, dopadne to takhle:
>
> ! Missing control sequence inserted.
> <inserted text>
>                 \inaccessible
> <to be read again>
>                    0
> <inserted text> ...>}\pdfliteral {1 1 0 0 k}\def 0
>                                                    0 0 1{1 1 0
>
> --- vyriznuto ---                           ^^^^^^^^^^
>
> l.63 \konecclanku
>
> ? h
> Please don't say `\def cs{...}', say `\def\cs{...}'.
>
> Jak vidite, expanduje. Muzete mi poradit, jak na to?
>
>
> V podstate jde o to, aby existovala promenna, ve ktere bude ulozena 
> konstanta barvy, ktera byla naposledy zapsana do pdf. Cili cela 
> definice makra je vlastne (bez vaseho navrhu)
>
> \newtoks\starabarva\starabarva={\Black}
> \def\pdfsetcolor#1{\pdfliteral{#1 k}\starabarva={#1}}

To je ovsem dost rozdil. Z Vaseho emailu jsem nabyl dojmu, ze 
\starabarva je ridici prikaz, ale on je to registr tokenu.
S tim je treba zachazet zcela jinak. Podivejte se do Olsakova TBN, jak 
to s registry tokenu je ohledne expanze v \edef
a pod. Ten trik je tam ukazan.
 Snad by mohlo byt spravne

\def\Black{0 0 0 1}
\def\Barva{1 0 1 .5}
\newtoks\starabarva\starabarva={\Black}
\def\pdfsetcolora#1{\edef\pomocny{\pdfliteral{\the#1 
k}\starabarva={\the#1}}\pomocny}
\def\pdfsetcolorb#1{\pdfliteral{#1 k}\starabarva={#1}}

\pdfsetcolora{\starabarva}
\pdfsetcolora{\starabarva}

\pdfsetcolorb\Barva
\pdfsetcolora{\starabarva}

Funguje tedy i opakovane volani.
Pokud tomu rozumim, co chcete, musite mit dva prikazy pro nastavovani barev.
Argument \pdfsetcolora samozrejme musi byt registr tokenu, v nemz je 
ulozena nejaka barva.
Argument \pdfsetcolorb je naopak ridici posloupnost, v niz je ulozena barva.

Jina moznost je schovavat to do ridici posloupnosti \starabarva. Aby se 
to ovsem nezacyklilo pri nastavovani nove
hodnoty \starvabarva pomoci stare hodnoty \starabarva, musi se pouzit 
\expandafter a zajistit jen jedna uroven expanze.
To taky nejak lze, je to urcite v TNB.

> Jak barvu ale z toho tokenu nastavit? (Pouzivam samozrejme pomocnou 
> promennou, nesnazim se o rekurzi.)

To je ten prikaz \pdfsetcolora.

Zdravi
                  Jaromir Kuben

>
>> To projde prelozene pdftexem bez problemu.
>
>
> Netvrdim, ze to neprojde,
>
>> \pdfliteral zrejme funguje jako \special, takze prikazy v jeho argumentu
>> se normalne expanduji.
>
>
> protoze funguje jako \special, takze to interpretuje az prohlizec pdf.
>
>> Aspon tak se to v pdfcolor.tex, kde je ta Vase definice \pdfsetcolor,
>> pouziva.
>
>
> To byla inspirace, mam vlastni makra. Ono v pdfcolor.tex stejne to 
> nejdulezitejsi neni, to jsem nasel az v manualu k pdf. :-/
>
> Diky za odpovedi,
>
> --vo
>





More information about the csTeX mailing list