diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/ean/ean8.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/ean/ean8.tex | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/ean/ean8.tex b/Master/texmf-dist/tex/generic/ean/ean8.tex new file mode 100644 index 00000000000..e6a23abbb4c --- /dev/null +++ b/Master/texmf-dist/tex/generic/ean/ean8.tex @@ -0,0 +1,114 @@ + +%%%%%%%%%%%% The macro \EAN generates EAN-8 barcodes. %%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% May 30, 1995 Jaroslav Moucka (Mou\v{c}ka) + +% This macro is inspired by ean13 macro by Petr Olsak +% The ean8 macro is very similar as ean13 and more simple. +% Don't change the Copyright message. +% You can use the macro on your own risk. +% The macro must be tested! There is no warranty that the macro works OK. + +% Usage: For example \EAN 8591-2342 generates the \vbox with barcodes +% in TeX hight accuracy using \rule primitive. +% The EAN number is appended downwards in OCR-b font (9pt). +% Don't use brackets in parameters! +% The macro checks the checksum in EAN. + +% Recomendation: If you plan the offset print, use the barcode +% correction 20 for your phototypesetter. See the \bcorr=.020mm bellow. + +\font\ocrb=ocrb9 + +\newcount\numlines \newcount\nummodules +\newcount\numdigit \newcount\evensum \newcount\oddsum + +\newdimen\X \newdimen\bcorr \newdimen\workdimen \newdimen\barheight + +%%% First, we prepare internal code in format: dig dig dig (44 digits). +%%% Odd possition of dig is number of moduls for white space, +%%% even for black space; from left to right. + +\def\internalcode{0111} % Begin mark at start +\def\frontdigits{} % 8--5 digit of EAN + +%%% EAN-8: +\message{The EAN-8 barcodes macro. Copyright (C) Jaroslav Moucka, 1995} + +\def\EAN{\begingroup\EANscan} + +\def\EANscan#1{\if#1-\let\next=\EANscan \else + \advance\numdigit by1 + \ifnum\numdigit<8 + \ifodd\numdigit \advance\evensum by #1 \else \advance\oddsum by #1 \fi + \let\next=\EANscan + \ifnum\numdigit=1 \def\tabs{\A\A\A\A} \fi + \ifnum\numdigit<5 \usetabA #1 \edef\frontdigits{\frontdigits#1} \else + \ifnum\numdigit=5 \insertseparator \A \usetabC #1 \def\enddigits{#1} + \else \usetabC #1 \edef\enddigits{\enddigits#1} + \fi\fi + \else \testchecksum #1 \usetabC #1 \edef\enddigits{\enddigits#1} + \let\next=\EANclose + \fi\fi \next} + + +\def\EANclose{\insertendmark + \wlog{EAN: \frontdigits\space\enddigits} + \wlog{EANinternal: \internalcode} + \expandafter\EANbox\internalcode..\endgroup} + +\def\testchecksum#1{\multiply\evensum by3 \advance\evensum by\oddsum + \oddsum=\evensum + \divide\oddsum by10 \multiply\oddsum by10 \advance\oddsum by10 + \advance\oddsum by-\evensum \ifnum\oddsum=10 \oddsum=0 \fi + \ifnum#1=\oddsum \else + \errmessage{The checksum digit has to be \the\oddsum, no #1 !}\fi} + +\def\A{\def\0{3211}\def\1{2221}\def\2{2122}\def\3{1411}\def\4{1132} + \def\5{1231}\def\6{1114}\def\7{1312}\def\8{1213}\def\9{3112}} + +\def\usetabA#1{\expandafter\scantab\tabs\end \usetabC #1} + +\def\scantab#1#2\end{#1\def\tabs{#2}} + +\def\usetabC#1{\edef\internalcode{\internalcode\csname#1\endcsname}} + +\def\insertseparator{\edef\internalcode{\internalcode 11111}} + +\def\insertendmark{\edef\internalcode{\internalcode 111}} + + +\def\EANbox{\vbox\bgroup\offinterlineskip + \setbox0=\hbox\bgroup \kern7\X \EANrepeat} + +\def\EANrepeat#1#2{\if#1.\let\next=\EANfinal \else\let\next=\EANrepeat + \advance\numlines by1 + \advance\nummodules by#1 \advance\nummodules by#2 + \workdimen=#1\X \advance\workdimen by \bcorr \kern\workdimen + \workdimen=#2\X \advance\workdimen by-\bcorr \vrule width\workdimen + \ifdim\barheight=0pt height 55.24242424\X \else height\barheight \fi + \ifnum\numlines=1 depth5\X\else + \ifnum\numlines=2 depth5\X\else + \ifnum\numlines=11 depth5\X\else + \ifnum\numlines=12 depth5\X\else + \ifnum\numlines=21 depth5\X\else + \ifnum\numlines=22 depth5\X\else depth0pt \fi\fi\fi\fi\fi\fi + \fi\next} + +\def\EANfinal{\testconsistence + \kern7\X\egroup + \dp0=0pt \box0 \kern-1\X + \hbox{\ocrb\kern11\X \frontdigits\kern5\X \enddigits} + \egroup } + +\def\internalerr{\errmassage{Sorry, my internal tables are wrong, may be.}} + +\def\testconsistence{\ifnum\numlines=22\else\internalerr\fi + \ifnum\nummodules=67\else\internalerr\fi} + +\barheight=0pt +\X=.33mm % Basic size 100%, SC2 code +\bcorr=.020mm % Barcode correction for offset +\endinput + + |