TeX language

Jaroslav Snajdr snajdr5 at students.zcu.cz
Tue Jan 13 01:06:31 CET 1998


>>>>> "PB" == Petr Bazant <Petr.Bazant at ff.cuni.cz> writes:

    PB> potrebuju vytvorit makro na oznacovani knih carovym kodem.
    PB> Predstavuju si to tak, ze zadam cislo od ... do ... a TeX
    PB> provede vzechny vypocty, to je predrazeni prefixu a vypocet
    PB> kontrolnich cislic za me. Je to numericky pomerne komplikovane
    PB> a tak jsem chtel nejakemu makru, jako je treba EAN.TEX od pana
    PB> Olsaka, predhodit hotove cislo.

    PB> \edef\a{\advance \n by 1 \n}

    PB> dostanu vynadano. Tusim, ze \edef neprovede pri definovani \a
    PB> tak uplnou expanzi. Da se to nejak vyresit?

\advance je povel hlavniho procesoru; expanzi projde bez uhony. To co
chcete, jde udelat treba takhle:

  {\advance\n by 1 \xdef\a{\the\n}}

Uvnitr skupiny inkrementuji \n a pak definuji globalne \a. Po ukonceni
skupiny se \n vrati na puvodni hodnotu.

Makro na vypocet EAN z ISBN vypada treba takhle:

\newcount\temp
\def\getnum#1#2{\if#2.\expandafter\let\expandafter\tecka\else
  \expandafter\ifx\sul\liche\def\sul{\sude}\else\def\sul{\liche}\fi
  \edef\cislo{\cislo\sul#1}\expandafter\getnum\fi#2}

\def\isbntoean#1{\let\liche=\hbox \let\sude=\vbox
  \def\cislo{\liche9\sude7\liche8}\def\sul{\liche}\getnum#1.%
  \count255=0
  \def\sude{\advance\count255 by}\def\liche##1{}%
  \cislo
  \multiply\count255 by 3
  \let\liche=\sude\def\sude##1{}%
  \cislo
  \temp=\count255
  \divide\count255 by 10 \multiply\count255 by 10
  \ifnum\count255=\count\temp\else\advance\count255 by 10\fi
  \advance\count255 by -\temp
  \let\liche=\relax \let\sude=\relax
  \cislo \the\count255\relax}

Pouziva se \isbntoean{ISBN}, napr. pro TBN:

  \isbntoean{8085615649} dava 9788085615647

-jns

,-----------------------------------------------------------------------.
| Jaroslav Snajdr                           http://home.zcu.cz/~snajdr5 |
| snajdr5 at students.zcu.cz (MIME welcomed)             FIDO: 2:423/33.15 |
`-----------------------------------------------------------------------'




More information about the csTeX mailing list