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