%
% bc128.sty: produce code128 Set-B barcode
%             (upper-and-lower case letters, numbers, and symbols)
%            or Set-C barcode (numbers)
%    Ver.1.00 (Apr.19, 1996) by K. Matsuura, M. Kitano and T. Sato 
%    (contact address: tsato@kuee.kyoto-u.ac.jp)
%    based on 'spreadtitle.sty'
% Usage: Set-B: \barcodeB{Abc 123}  or \BarcodeB{Abc 123} (with letters)
%        Set-C: \barcodeC{1234}  or \BarcodeC{1234} (with letters)
%
% Sample is given after the line \endinput
%
% Note: \barcodeC produces compressed code for numbers by generating a symbol
%       for each two-digit number.
%       Set-A code (special symbols in place of lowercase of set B) is not
%       supported. Also, Set-B and Set-C cannot be mixed in a barcode except
%       for a case of an odd-digit number generated by \barcodeC, where the
%       last digit is automatically switched to Set-B.
\newdimen\barheight
\newdimen\barunit
\newdimen\@bsheight
\newdimen\@BH
\newdimen\@BN
\newdimen\@BW
\newdimen\@BX
\newdimen\@BY
\newdimen\@BS
\newdimen\@BT
\newcount\@a
\newcount\@b
\newcount\@c
\newcount\@d
\newcount\@e
\newcount\@f
\newif\if@Bstring
%%%%%%% default control parametrs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\barheight=12mm          % height of the code
\barunit=0.4mm           % unit width (=width of the narrow pattern)
\def\widebarfactor{2.0}  % ratio of the wide and narrow bars
\def\three{3.0}
\def\four{4.0}
\def\spacebarfactor{2.5} % ratio of inter-symbol space to the narrow bar 
\def\thinbarfactor{0.1}  % thinning factor for black bars
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\barcodeB{\@Bstringfalse\@@barcodeB}
\def\BarcodeB{\@Bstringtrue\@@barcodeB}
\def\@@barcodeB#1{%
 \@BH=\barheight
 \@BN=\barunit
 \@BW=\widebarfactor\barunit
 \@BX=\three\barunit
 \@BY=\four\barunit
 \@BS=\spacebarfactor\barunit
 \@BT=\thinbarfactor\barunit
 \if@Bstring
  \let\@Bsize=\small%
  \ifdim\barunit<0.3mm\let\@Bsize=\footnotesize%
  \ifdim\barunit<0.2mm\let\@Bsize=\scriptsize%
 \fi\fi% \fi %<======================================
 \@bsheight=\barheight\relax
 {\@Bsize\global\advance\@bsheight -0.7\normalbaselineskip}
 \fi %<==============================================
 \@a=0
 \@b=0
 \@c=104
 \@d=0
 \setbox\@tempboxa=\hbox{\B@cv}%
 \mbox{\expandafter\box\@tempboxa\B@geteachchar#1\end}%
}
\def\B@LETBLANK:{\let\B@letblank= }\B@LETBLANK: 
\def\B@geteachchar{\futurelet\B@nextletchar\B@nextdefchar}
\def\B@nextdefchar#1{%
    \ifx #1\end \let\next=\relax  % the title is finished
 \@BH=\barheight
 \@d=\@c%
 \divide\@d 103%
 \multiply\@d 103%
 \advance\@c -\@d%
 \advance\@c 1%
 \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@c\endcsname}%
 \box\@tempboxa%
 \setbox\@tempboxa=\hbox{\Bn@i}%
 \box\@tempboxa%
    \else
      \if@Bstring
        \@BH=\@bsheight
      \else
        \@BH=\barheight
      \fi
      \ifx \B@nextletchar\B@letblank\B@charcode{ }\fi
      \B@charcode{#1}%
      \let\next=\B@geteachchar
    \fi \next}
\def\B@charcode#1{\@tempcnta=`#1\relax%
% \ifnum\@tempcnta>96\ifnum\@tempcnta<123\advance\@tempcnta -32\relax\fi\fi%
 \advance\@tempcnta -31%
 \@a=\@tempcnta%
 \advance\@a -1%
 \advance\@b 1%
 \multiply\@a \@b%
 \advance\@c \@a%
  \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@tempcnta\endcsname}%
 \if@Bstring%
  \@tempdima=\wd\@tempboxa%
  \vbox{\@Bsize\advance\baselineskip-0.3\normalbaselineskip%
  \box\@tempboxa\hbox to \@tempdima{\hss\tt #1 \hss}}%
 \else%
  \box\@tempboxa%
 \fi%
}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\barcodeC{\@Bstringfalse\@@barcodeC}
\def\BarcodeC{\@Bstringtrue\@@barcodeC}
\def\@@barcodeC#1{%
 \@BH=\barheight
 \@BN=\barunit
 \@BW=\widebarfactor\barunit
 \@BX=\three\barunit
 \@BY=\four\barunit
 \@BS=\spacebarfactor\barunit
 \@BT=\thinbarfactor\barunit
 \if@Bstring
  \let\@Bsize=\small%
  \ifdim\barunit<0.3mm\let\@Bsize=\footnotesize%
  \ifdim\barunit<0.2mm\let\@Bsize=\scriptsize%
  \fi\fi
  \@bsheight=\barheight\relax
  {\@Bsize\global\advance\@bsheight -0.7\normalbaselineskip}
 \fi
 \@a=0
 \@b=0
 \@c=105
 \@d=0
 \@e=0
 \@f=100
 \setbox\@tempboxa=\hbox{\B@cvi}%
 \mbox{\expandafter\box\@tempboxa\C@geteachchar#1\end}%
}
%\def\B@LETBLANK:{\let\B@letblank= }\B@LETBLANK: 
\def\C@geteachchar{\futurelet\C@nextletchar\C@nextdefchar}
\def\C@nextdefchar#1{%
  \ifx #1\end%
    \let\next=\relax% the title is finished
    \ifodd\@b%         the total number of digits is odd: output the last
      \divide\@tempcnta 10\relax
      \@tempcntb=\@tempcnta\relax
      \advance\@tempcnta 17\relax
      \@a=\@tempcnta\relax
      \advance\@a -1\relax
      \advance\@e 1\relax
      \multiply\@f \@e\relax
      \advance\@c \@f\relax
      \advance\@e 1\relax
      \multiply\@a \@e\relax
      \advance\@c \@a\relax
      \@d=\@c\relax
      \divide\@d 103\relax
      \multiply\@d 103\relax
      \advance\@c -\@d\relax
      \advance\@c 1\relax
      \setbox\@tempboxa=\hbox{\B@ci}%
      \if@Bstring%        print the last digit
       \@BH=\@bsheight
       \@tempdima=\wd\@tempboxa%
       \vbox{\@Bsize\advance\baselineskip-0.3\normalbaselineskip%
        \box\@tempboxa\hbox to \@tempdima{\tt\number\@tempcntb\hss}}%
       \@BH=\barheight
      \else%
       \@BH=\barheight
       \box\@tempboxa%
      \fi%
      \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@tempcnta\endcsname}%
      \box\@tempboxa%
      \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@c\endcsname}%
      \box\@tempboxa%         
      \setbox\@tempboxa=\hbox{\Bn@i}%
      \box\@tempboxa%
     \else%           total number of the digits is even
      \@BH=\barheight
      \@d=\@c\relax
      \divide\@d 103\relax
      \multiply\@d 103\relax
      \advance\@c -\@d\relax
      \advance\@c 1\relax
      \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@c\endcsname}%
      \box\@tempboxa%
      \setbox\@tempboxa=\hbox{\Bn@i}%
      \box\@tempboxa%
     \fi%
    \else%           not the last digit
      \if@Bstring
        \@BH=\@bsheight
      \else
        \@BH=\barheight
      \fi
      \ifx \C@nextletchar\B@letblank\C@charcode{ }\fi
      \C@charcode{#1}%
      \let\next=\C@geteachchar
    \fi \next}
\def\C@charcode#1{%
\advance\@b 1\relax
\ifodd\@b%       just store the number
 \@tempcnta=`#1\relax
 \advance\@tempcnta -48\relax
 \multiply\@tempcnta 10\relax
\else%           output the two digits
 \advance\@e 1\relax
 \@a=`#1\relax
 \advance\@a -48\relax
 \advance\@tempcnta \@a\relax
 \@a=\@tempcnta\relax
 \@tempcntb=\@tempcnta\relax
 \advance\@tempcnta 1\relax
 \multiply\@a \@e\relax
 \advance\@c \@a\relax
 \setbox\@tempboxa=\hbox{\csname B@\romannumeral\@tempcnta\endcsname}%
 \if@Bstring%
  \@tempdima=\wd\@tempboxa%
  \vbox{\@Bsize\advance\baselineskip-0.3\normalbaselineskip%
  \ifnum\@tempcntb > 9
   \box\@tempboxa\hbox to \@tempdima{\hss\tt\number\@tempcntb\hss}%
  \else
   \box\@tempboxa\hbox to \@tempdima{\hss\tt0\number\@tempcntb\hss}%
  \fi}%
 \else%
  \box\@tempboxa%
 \fi%
\fi%
}
%
\def\@barcode#1#2#3#4#5#6{%
 \@tempdima=#1\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#2\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
 \@tempdima=#3\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#4\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
 \@tempdima=#5\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#6\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
}
%
\def\B@i     {\@barcode\@BW\@BN\@BW\@BW\@BW\@BW}
\def\B@ii    {\@barcode\@BW\@BW\@BW\@BN\@BW\@BW}
\def\B@iii   {\@barcode\@BW\@BW\@BW\@BW\@BW\@BN}
\def\B@iv    {\@barcode\@BN\@BW\@BN\@BW\@BW\@BX}
\def\B@v     {\@barcode\@BN\@BW\@BN\@BX\@BW\@BW}
\def\B@vi    {\@barcode\@BN\@BX\@BN\@BW\@BW\@BW}
\def\B@vii   {\@barcode\@BN\@BW\@BW\@BW\@BN\@BX}
\def\B@viii  {\@barcode\@BN\@BW\@BW\@BX\@BN\@BW}
\def\B@ix    {\@barcode\@BN\@BX\@BW\@BW\@BN\@BW}
\def\B@x     {\@barcode\@BW\@BW\@BN\@BW\@BN\@BX}
\def\B@xi    {\@barcode\@BW\@BW\@BN\@BX\@BN\@BW}
\def\B@xii   {\@barcode\@BW\@BX\@BN\@BW\@BN\@BW}
\def\B@xiii  {\@barcode\@BN\@BN\@BW\@BW\@BX\@BW}
\def\B@xiv   {\@barcode\@BN\@BW\@BW\@BN\@BX\@BW}
\def\B@xv    {\@barcode\@BN\@BW\@BW\@BW\@BX\@BN}
\def\B@xvi   {\@barcode\@BN\@BN\@BX\@BW\@BW\@BW}
\def\B@xvii  {\@barcode\@BN\@BW\@BX\@BN\@BW\@BW}
\def\B@xviii {\@barcode\@BN\@BW\@BX\@BW\@BW\@BN}
\def\B@xix   {\@barcode\@BW\@BW\@BX\@BW\@BN\@BN}
\def\B@xx    {\@barcode\@BW\@BW\@BN\@BN\@BX\@BW}
\def\B@xxi   {\@barcode\@BW\@BW\@BN\@BW\@BX\@BN}
\def\B@xxii  {\@barcode\@BW\@BN\@BX\@BW\@BN\@BW}
\def\B@xxiii {\@barcode\@BW\@BW\@BX\@BN\@BN\@BW}
\def\B@xxiv  {\@barcode\@BX\@BN\@BW\@BN\@BX\@BN}
\def\B@xxv   {\@barcode\@BX\@BN\@BN\@BW\@BW\@BW}
\def\B@xxvi  {\@barcode\@BX\@BW\@BN\@BN\@BW\@BW}
\def\B@xxvii {\@barcode\@BX\@BW\@BN\@BW\@BW\@BN}
\def\B@xxviii {\@barcode\@BX\@BN\@BW\@BW\@BN\@BW}
\def\B@xxix {\@barcode\@BX\@BW\@BW\@BN\@BN\@BW}
\def\B@xxx  {\@barcode\@BX\@BW\@BW\@BW\@BN\@BN}
\def\B@xxxi {\@barcode\@BW\@BN\@BW\@BN\@BW\@BX}
\def\B@xxxii {\@barcode\@BW\@BN\@BW\@BX\@BW\@BN}
\def\B@xxxiii    {\@barcode\@BW\@BX\@BW\@BN\@BW\@BN}
\def\B@xxxiv {\@barcode\@BN\@BN\@BN\@BX\@BW\@BX}
\def\B@xxxv {\@barcode\@BN\@BX\@BN\@BN\@BW\@BX}
\def\B@xxxvi {\@barcode\@BN\@BX\@BN\@BX\@BW\@BN}
\def\B@xxxvii  {\@barcode\@BN\@BN\@BW\@BX\@BN\@BX}
\def\B@xxxviii   {\@barcode\@BN\@BX\@BW\@BN\@BN\@BX}
\def\B@xxxix {\@barcode\@BN\@BX\@BW\@BX\@BN\@BN}
\def\B@xl   {\@barcode\@BW\@BN\@BN\@BX\@BN\@BX}
\def\B@xli  {\@barcode\@BW\@BX\@BN\@BN\@BN\@BX}
\def\B@xlii {\@barcode\@BW\@BX\@BN\@BX\@BN\@BN}
\def\B@xliii {\@barcode\@BN\@BN\@BW\@BN\@BX\@BX}
\def\B@xliv {\@barcode\@BN\@BN\@BW\@BX\@BX\@BN}
\def\B@xlv  {\@barcode\@BN\@BX\@BW\@BN\@BX\@BN}
\def\B@xlvi {\@barcode\@BN\@BN\@BX\@BN\@BW\@BX}
\def\B@xlvii {\@barcode\@BN\@BN\@BX\@BX\@BW\@BN}
\def\B@xlviii {\@barcode\@BN\@BX\@BX\@BN\@BW\@BN}
\def\B@xlix {\@barcode\@BX\@BN\@BX\@BN\@BW\@BN}
\def\B@l    {\@barcode\@BW\@BN\@BN\@BX\@BX\@BN}
\def\B@li   {\@barcode\@BW\@BX\@BN\@BN\@BX\@BN}
\def\B@lii  {\@barcode\@BW\@BN\@BX\@BN\@BN\@BX}
\def\B@liii {\@barcode\@BW\@BN\@BX\@BX\@BN\@BN}
\def\B@liv  {\@barcode\@BW\@BN\@BX\@BN\@BX\@BN}
\def\B@lv   {\@barcode\@BX\@BN\@BN\@BN\@BW\@BX}
\def\B@lvi  {\@barcode\@BX\@BN\@BN\@BX\@BW\@BN}
\def\B@lvii {\@barcode\@BX\@BX\@BN\@BN\@BW\@BN}
\def\B@lviii {\@barcode\@BX\@BN\@BW\@BN\@BN\@BX}
\def\B@lix  {\@barcode\@BX\@BN\@BW\@BX\@BN\@BN}
\def\B@lx   {\@barcode\@BX\@BX\@BW\@BN\@BN\@BN}
\def\B@lxi  {\@barcode\@BX\@BN\@BY\@BN\@BN\@BN}
\def\B@lxii {\@barcode\@BW\@BW\@BN\@BY\@BN\@BN}
\def\B@lxiii {\@barcode\@BY\@BX\@BN\@BN\@BN\@BN}
\def\B@lxiv {\@barcode\@BN\@BN\@BN\@BW\@BW\@BY}
\def\B@lxv  {\@barcode\@BN\@BN\@BN\@BY\@BW\@BW}
\def\B@lxvi {\@barcode\@BN\@BW\@BN\@BN\@BW\@BY}
\def\B@lxvii{\@barcode\@BN\@BW\@BN\@BY\@BW\@BN}
\def\B@lxviii {\@barcode\@BN\@BY\@BN\@BN\@BW\@BW}
\def\B@lxix {\@barcode\@BN\@BY\@BN\@BW\@BW\@BN}
\def\B@lxx  {\@barcode\@BN\@BN\@BW\@BW\@BN\@BY}
\def\B@lxxi {\@barcode\@BN\@BN\@BW\@BY\@BN\@BW}
\def\B@lxxii {\@barcode\@BN\@BW\@BW\@BN\@BN\@BY}
\def\B@lxxiii    {\@barcode\@BN\@BW\@BW\@BY\@BN\@BN}
\def\B@lxxiv {\@barcode\@BN\@BY\@BW\@BN\@BN\@BW}
\def\B@lxxv {\@barcode\@BN\@BY\@BW\@BW\@BN\@BN}
\def\B@lxxvi {\@barcode\@BW\@BY\@BN\@BW\@BN\@BN}
\def\B@lxxvii    {\@barcode\@BW\@BW\@BN\@BN\@BN\@BY}
\def\B@lxxviii   {\@barcode\@BY\@BN\@BX\@BN\@BN\@BN}
\def\B@lxxix {\@barcode\@BW\@BY\@BN\@BN\@BN\@BW}
\def\B@lxxx {\@barcode\@BN\@BX\@BY\@BN\@BN\@BN}
\def\B@lxxxi {\@barcode\@BN\@BN\@BN\@BW\@BY\@BW}
\def\B@lxxxii    {\@barcode\@BN\@BW\@BN\@BN\@BY\@BW}
\def\B@lxxxiii   {\@barcode\@BN\@BW\@BN\@BW\@BY\@BN}
\def\B@lxxxiv    {\@barcode\@BN\@BN\@BY\@BW\@BN\@BW}
\def\B@lxxxv {\@barcode\@BN\@BW\@BY\@BN\@BN\@BW}
\def\B@lxxxvi    {\@barcode\@BN\@BW\@BY\@BW\@BN\@BN}
\def\B@lxxxvii   {\@barcode\@BY\@BN\@BN\@BW\@BN\@BW}
\def\B@lxxxviii  {\@barcode\@BY\@BW\@BN\@BN\@BN\@BW}
\def\B@lxxxix    {\@barcode\@BY\@BW\@BN\@BW\@BN\@BN}
\def\B@xc   {\@barcode\@BW\@BN\@BW\@BN\@BY\@BN}
\def\B@xci  {\@barcode\@BW\@BN\@BY\@BN\@BW\@BN}
\def\B@xcii {\@barcode\@BY\@BN\@BW\@BN\@BW\@BN}
\def\B@xciii {\@barcode\@BN\@BN\@BN\@BN\@BY\@BX}
\def\B@xciv {\@barcode\@BN\@BN\@BN\@BX\@BY\@BN}
\def\B@xcv  {\@barcode\@BN\@BX\@BN\@BN\@BY\@BN}
\def\B@xcvi {\@barcode\@BN\@BN\@BY\@BN\@BN\@BX}
\def\B@xcvii {\@barcode\@BN\@BN\@BY\@BX\@BN\@BN}
\def\B@xcviii {\@barcode\@BY\@BN\@BN\@BN\@BN\@BX}
\def\B@xcix {\@barcode\@BY\@BN\@BN\@BX\@BN\@BN}
\def\B@c    {\@barcode\@BN\@BN\@BX\@BN\@BY\@BN}
\def\B@ci   {\@barcode\@BN\@BN\@BY\@BN\@BX\@BN}
\def\B@cii  {\@barcode\@BX\@BN\@BN\@BN\@BY\@BN}
\def\B@ciii {\@barcode\@BY\@BN\@BN\@BN\@BX\@BN}
\def\B@civ  {\@barcode\@BW\@BN\@BN\@BY\@BN\@BW}
\def\B@cv   {\@barcode\@BW\@BN\@BN\@BW\@BN\@BY}
\def\B@cvi  {\@barcode\@BW\@BN\@BN\@BW\@BX\@BW}

\def\@barcoden#1#2#3#4#5#6#7{%
 \@tempdima=#1\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#2\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
 \@tempdima=#3\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#4\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
 \@tempdima=#5\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 \@tempdima=#6\relax\advance\@tempdima \@BT\relax%
 \hskip \@tempdima%
 \@tempdima=#7\relax\advance\@tempdima -\@BT\relax%
 \vrule width \@tempdima height \@BH%
 }

\def\Bn@i  {\@barcoden\@BW\@BX\@BX\@BN\@BN\@BN\@BW}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\endinput

\documentstyle[bc128]{j-article}
\title{バーコード出力}
\author{佐藤　亨}
\date{April 19, 1996}
\begin{document}
\maketitle

例えば文字列「Abc 123\$\#」を表すバーコードを作る
には、\verb+\barcodeB{Abc 123\$\#}+ と
すれば、\barcodeB{Abc 123\$\#} が得られます。
また、\verb+\BarcodeB{Abc 123\$\#}+ と
すると、\BarcodeB{Abc 123\$\#} のように、
コードの下に文字列が書かれます。

数字のみの場合は、\verb+\barcodeC{012345}+ で \barcodeC{012345} が、
または、\verb+\BarcodeC{012345}+ で \BarcodeC{012345} という
ように、Set C の圧縮モード（2 桁を 1 シンボルで表示する）が利用できます。
ただし、奇数桁の数を指定すると、最後の 1 桁のみ Set B に切り替えて表示
します。従って 4 桁以上の数字の場合に有効です。

code128 は、「コード ABC 指定」＋「文字列」＋「チェック文字」＋
「終了文字」により構成されます。一般には「コード ABC 指定」＋
「文字列」の部分は一つのバーコードの中に複数組現れてもよいのですが、
このスタイルファイルでは、Set C で奇数桁の数字を指定する場合以外は
混合構成はできません。

コードの高さや幅は、以下のパラメータにより指定します。
\begin{verbatim}
%%%%%%% 制御パラメータ標準値一覧 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\barheight=12mm          % コードの高さ（文字の高さは含まない）
\barunit=0.4mm           % 単位長（細いコードの幅）
\def\widebarfactor{2.0}  % 太いコードと細いコードの幅の比（2.0～3.0）
\def\spacebarfactor{2.5} % シンボル間の空白と細いコードの比（0.5 以上）
\def\thinbarfactor{0.1}  % 黒バーをこのファクターだけ狭くする
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{verbatim}

注意： Set C コードで数字以外の文字を指定した場合の結果は
保証されません。
\end{document}

もともとのニュース記事

Newsgroups: fj.comp.texhax
From: tsato@tsurugi.kuee.kyoto-u.ac.jp (Toru Sato)
Subject: barcode style (code128)
Organization: Dept. of Electr., Kyoto Univ., Japan
Date: Fri, 19 Apr 1996 07:25:48 GMT

佐藤＠京大．電子通信 です。

昨年投稿した 3-of-9 code に引き続き、英小文字も表現できる code128 の
バーコードを作成するマクロを公開致します（この作品は、主に北野正雄先生の
指導によりM2の松浦孝介氏により作成されました）。ある程度のテストは行って
いますが、結果は保証致しませんので、ご使用にあたっては十分ご注意下さい。

以下に使用方法とスタイルファイルをつけます。
----------------------------------------------------------------------
bc128.sty 利用の手引き    (ver1.00: 96/04/19  K.Matsuura, M.Kitano, T.Sato)

「code128」のバーコードを作成するマクロです。
code128 は、Set A,B,C の3種より構成され、
 Set A: 英大文字と数字、記号、制御文字
 Set B: 英大小文字と数字、記号
 Set C: 数字（圧縮モード）
を扱います。このスタイルファイルは、このうち Set B,C のみを作成するための
ものです（Set A は TeX で制御文字を扱うのが面倒なのと利用頻度が低そうなので
やめました）。また後述のように、同一バーコード中では Set B と C の混合は
できません。

例えば文字列「Abc 123$#」を表すバーコードを作るには、
  \documentstyle[bc128]{article}
などと指定した上で、文書中の任意の場所で
  \barcodeB{Abc 123\$\#}
とします。
  \BarcodeB{Abc 123\$\#}
とすると、コードの下に文字列が書かれます。

数字のみの場合は、
  \barcodeC{012345}
または
  \BarcodeC{012345}
とすると Set C の圧縮モード（2桁を1シンボルで表示する）が利用できます。
ただし、奇数桁の数を指定すると、最後の1桁のみ Set B に切り替えて表示
します。従って4桁以上の数字の場合に有効です。

code128 は、「コードABC指定」＋「文字列」＋「チェック文字」＋「終了文字」
により構成されます。一般には「コードABC指定」＋「文字列」の部分は一つの
バーコードの中に複数組現れてもよいのですが、このスタイルファイルでは、
Set C で奇数桁の数字を指定する場合以外は混合構成はできません。

コードの高さや幅は、以下のパラメータにより指定します。
%%%%%%% 制御パラメータ標準値一覧 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\barheight=12mm          % コードの高さ（文字の高さは含まない）
\barunit=0.4mm           % 単位長（細いコードの幅）
\def\widebarfactor{2.0}  % 太いコードと細いコードの幅の比（2.0～3.0）
\def\spacebarfactor{2.5} % シンボル間の空白と細いコードの比（0.5 以上）
\def\thinbarfactor{0.1}  % 黒バーをこのファクターだけ狭くする
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

注意：
・Set Cコードで数字以外の文字を指定した場合の結果は保証されません。

　　　　　　　　　　　　佐藤　亨＠電子通信工学教室．京都大学
　　　　　　　　　　　　tsato@kuee.kyoto-u.ac.jp
                        http://www-lab26.kuee.kyoto-u.ac.jp/~tsato

