% $Id: sperr.tex,v 1.2 1995/04/16 23:27:04 schrod Exp $ %--------------------------------------------------------- % Written by Joachim Schrod . % This file is distributed without any copyright restriction. % % Makro-Datei zum Sperren von Zeichenfolgen. % % Bitte sperrt damit keine Gemeinen. % % Joachim Schrod % % % Benutzung: \sperr{TEXT}{KERNING} % Wenn in TEXT mehrere Token als eines behandelt werden sollen % (z.B. Umlaute), m\"ussen diese Tokens geklammert werden. % \ifx \CatEscape\undefined \chardef\CatEscape=0 \chardef\CatOpen=1 \chardef\CatClose=2 \chardef\CatIgnore=9 \chardef\CatLetter=11 \chardef\CatOther=12 \chardef\CatActive=13 % \active of plain.tex \chardef\CatInvalid=15 \chardef\CatAtCode=\catcode`\@ \chardef\CatUsCode=\catcode`\_ \fi \catcode`\@=\CatLetter % top level macro file \catcode`\_=\CatLetter \begingroup \catcode`\$=\CatIgnore \catcode`\:=\CatIgnore \message{Text sperren, $Revision: 1.2 $} \endgroup \let\end_list=\relax \edef\empty_list{\end_list} \def\split#1#2\end_list{% \edef\sec_char{#1}% \toks@={#2\end_list}% } \def\do_split{% \expandafter \split \the\toks@ \end_list } \def\next_char{% \edef\first_char{\sec_char}% \do_split } \newdimen\sperr_width \def\sperr#1#2{% % Text, Sperrbreite \toks@={#1\end_list}% \sperr_width=#2\relax \do_split \next_char % initialize pipeline \ifx \sec_char\empty_list #1% % nur 1 Zeichen \else \do_sperr \fi } \newif \if@loop \def\do_sperr{% \loop \set_char % Zeichen und nachfolgendes Kerning setzen \next_char \ifx \sec_char\empty_list \first_char \@loopfalse \else \@looptrue \fi \if@loop \repeat } \newbox\kern_box \newdimen\kern_width \def\set_char{% \setbox\kern_box=\hbox{\first_char\sec_char}% \kern_width=\wd\kern_box \setbox\kern_box=\hbox{\hbox{\first_char}\hbox{\sec_char}}% \advance \kern_width by -\wd\kern_box \advance \kern_width by \sperr_width \first_char \kern\kern_width } \catcode`\@=\CatAtCode \catcode`\_=\CatUsCode \endinput