Immer wieder lese ich, dass in TeX Funktionen auf catcodes, genauer auf ihrer Änderung, basieren oder dass einige Eigenheiten von TeX auf unterschiedliche catcodes zurückzuführen sind. Ich habe aber gelegentlich auch schon |
Jedem ASCII-Zeichen (mit XeLaTeX und LuaLaTeX vermutlich jedem Unicode-Zeichen1) ist unter anderem ein Kategorie-Code oder catcode zugeordnet. Es gibt 16 Kategoriecodes. Die folgende Tabelle listet sie auf zusammen mit LaTeX's Vorbelegung.
Die Kategoriecodes bestimmen, welches Zeichen eine Befehlssequenz einleitet, welche ein Argument beginnen und beenden, welche im Mathemodus Hoch- und Tiefstellung bedeuten usw. Für den Anwender ist es in der Regel zweitrangig, darüber Bescheid zu wissen. Die wesentlichen Funktionen von Open in Online-Editor
\documentclass{article} \newcommand*\amp{\&} \begin{document} +\amp +\par +\& + \end{document} Der Unterschied zwischen Buchstaben und Nicht-Buchstaben wird auch bei der Funktion des Auch von Interesse ist vielleicht der Kategoriecode aktiv. Ein Zeichen, dessen Kategoriecode 13 ist, verhält sich wie eine Befehlssequenz. Man kennt hier üblicherweise Open in Online-Editor
\catcode`\~=13 \def~{\nobreakspace{}} Grundsätzlich kann der Kategoriecode jedes Zeichens zu jeder Zeit geändert werden. Das verwenden z.B. die Befehle und Umgebungen für Verbatim-Text, die es ja ermöglichen, auch die Zeichen, die nicht Buchstabe oder anderes Zeichen sind, direkt auszugeben. Die Vorbelegung wird soweit ich weiß1 teilweise vom Format und teilweise vom Kernel vorgenommen. Der vorige Absatz stimmt nicht ganz: sobald ein Zeichen als Argument eines Befehls gelesen wurde, ist sein Kategoriecode fixiert. Daher müssen Befehle wie Die gerade erwähnte Fixierung in Argumenten von Befehlen ist übrigens der Grund, warum man Befehle wie Der folgende Code zeigt jetzt noch ein Beispiel aus dem Kernel (Teil der Definition der Open in Online-Editor
\begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 \catcode `\{=12 \catcode `\}=12 \catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]] |gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]] |endgroup Meine Erfahrung und mein Wissen über Open in Online-Editor
\documentclass{article} \usepackage{array} \newcommand*\zeichen[1]{% -- #1 --\par Zeichencode: \number`#1 \par uccode: \the\uccode`#1 \par lccode: \the\lccode`#1 \par Kategoriecode: \the\catcode`#1 \par } \begin{document} \catcode`\A=12 \begin{tabular}{*2{p{.33\linewidth}}} \zeichen{a} & \zeichen{A} \\ \lowercase{\zeichen{A}} & % wie \zeichen{a}, auch der Kategoriecode stimmt \uppercase{\zeichen{a}} % wie \zeichen{A}, auch der Kategoriecode stimmt \end{tabular} \end{document} Als Anwendung ist mir vor allem der „ Open in Online-Editor
\documentclass{article} \usepackage{xcolor} \begingroup\lccode`~=`. \lowercase{\endgroup\def~}#1{\color{red}{#1}} \newenvironment{strange}{\catcode`\.=13 }{} \begin{document} .foo \begin{strange} .foo \end{strange} \end{document} Man nützt hier aus, dass
beantwortet 28 Jan '14, 11:59 cgnieder Der Absatz mit verbatim klingt etwas wirr. Der Catcode eines Zeichen liegt unverrückbar fest, sobald TeX das Zeichen gelesen hat - egal aus welchen Grund. Da die Argumente eines Befehls gelesen werden, bevor der Befehl ausgeführt wird, kann ein Befehl die catcodes seiner (echten) Argumente nicht ändern. Wenn er das trotzdem will, muss er sie noch mal einlesen z.B. mit
(29 Jan '14, 09:03)
Ulrike Fischer
@Clemens Sollte ich das etwa zu früh als beantwortet akzeptiert (und upgevote)t haben? ;-) Das wird ja von Tag zu Tag besser!
(30 Jan '14, 22:48)
Speravir
@Speravir ich hab noch mal ein bisschen was zu den lc- und uccodes nachgelesen und dachte, ich geb das gleich mal weiter :)
(30 Jan '14, 23:02)
cgnieder
2
Zu Fußnote 1: Jedes Zeichen wird einer Kategorie zugeordnet, egal ob nun ASCII oder Unicode. Hauptsache, es ist dem zugrundeliegenden TeX-System bekannt, ansonsten gibt es in der Ausgabe wirre Zeichen oder eben einen Fehler.
(02 Feb '14, 14:52)
Herbert
@Clemens Im letzten Codeblock, sollte es nicht besser heißen:
(25 Okt '19, 12:41)
AlexG
Ergebnis 5 von 8
show 3 more comments
|
Ein Beispiel für catcode-Spielereien, wobei ich die ersten Zeilen mit einem Kommentar versehen habe, damit der Einstieg etwas leichter ist ... Mit tex/xetex/luatex/etex/... laufen lassen. Der Autor steht unten rechts im Ei. Open in Online-Editor
\let~\catcode % Das aktive Zeichen ~ ist jetzt identisch zu \catcode ~`z0 % Zeichen z bekommt den catcode 0, wird also \ ~`'01 % \catcode`'01, Hochkomma wird zu { ~`,02 % \catcode`,02, Komma wird zu } ~`406 % \catcode`406, 4 wird zu # ~`@11 % \catcode`@11, @ wird zum normalen Buchstaben ~`=13 % \catcode`=13, = wird aktiv zdef=41' % \def=#1{ ~`4113 % \catcode`#1 13 zgdef,=$$41' % \gdef}=$ ~`4113 zcountdef,=++41' ~`4113zlet,=AA'B!d6l;8p/Pa5Nr.eq3Ei[ DSm@|H9c]o1M?TgJk-CF2*tnIj7Rf,=""'2d-NDDRIeMj|Nir -n-;.g./pjkCm1Bg;J7R3Ie!kmEae9djCEe6t8Dt@lpdCcM?or8m8 rat]F3i.1m;[5M*agFiotMTml7a/Rd/pMe/|lB5-jca*iCIc!??9n.g!/ mq2etc8MfSj8rmko-SSStB21plt?et5tNNT?BliPqi51Je8l|[-p.n.9/Tp[H a9[gkcTk[d/!ie5]F!iT[ri|kPDPHdaNrBp[Tp!.ra1j;.i8fd851i?BoS5||2m iE.F|Mq*.EcPq*-rB812?[C|MnCHnke|D13o|l3Rt/73p-[lf-/C3|kHan[Sqi!E2 ltCiJEa*@]22dNng8RrpnoBk5DtH*9cH!rRdiEj|3tiBrPBBHEn8l|.e5593o3JPp;g i1pkS]Dp52SilElS-mt8l.2kgD]!ac]n-JPDReD@[JP?lNT6N-dEPNnNpIkNH/1@gNFCd e869SNnfCf9]*|6ni8BPeD7M519rq-;T3IPSt*6-F@@BP68D?-|/5DN?e5Hp3[BBHNk31|H 9ge.maeERBqTc3tp@pNIpDtEqMeS.pe5FmHJ.-eDmpmC.8P;g1!1/[PDt/JDH1Bl]@1qmlPiJ N*PacC?1md;!!NE/k.S99I98gqpcn9c8NaEao[!1!kJfm99adfi1jp*/5Dea-R-1d8;I?|gPl ][ai-;8kgHlJ?cS3S-ic;ceE.EJn|nke2;Sa1!FIoadp1EBCig*[//9|55DJ.cqDB@6lERPP5-q cC.go-n3fE5;7-9faJf8Fo]gcEHa6.midi@f-/CHNHe/R7p|dqp|@do-q2qB3NEalCold3?*8B6 D1jFq7-Ek@.icJ]l|F@-]n-HprI@pJNBCccN*;NR5lk.!5!M?M*ID;e@7ce/!Ef[ggt5jiHP/]N F-p1e[ESmS@g-kc;/p29[HE/MSnClCkMtn1ppHJ*g[f@Ilak6DeJM..o.;?P/19I-?!BE*]a!lq /an?5D7l9M]98d2M32|DJ2?5r|5Be|aa1J]|]Mn]TTqa?.k[ki2qrlfoHc@E;8R9Djime;J]M5S NiS;S[FPe91Ht-FR|aN..m6n99SeP7tT8qoRqecn97gHE/E!om?9]E9dPDTB*Pdt[dolk/kRj9o ]/RH9NfD8Rq2ra/2/N[H5J.aI3SkadJpfRDFT/mr]ECdPm|TTJDe1.;9.!mk-a.qCorTm*DfDp? Eqk2cI!JfNojFTPt@fSeCpaI!6C;TSd!|T?fFoNgJ@p|R8|aRHf16NPlrkiTnDgBdJ;Nn6D*ocn kC8?r2TgF?68PDF7aN*9.68|1gg31.B-k3-I;5]2kRplq..]j|Eq5JmeE7iSI;;fp/25|/-gE -Tdqf;D*S6RFg9@|n*mRJS?9orI/HNJiT|o!8,=[[',+]][$CC0C0$TT1T25+&&zadvance+* *zmultiply+//zdivide+##zifnum[[+))zfi+((zifx+||zelse[[+>>zexpandafter+; ;zxdef[[+::zgdef[[=z}}4142'>;zcsname41zendcsname'42,,[[=z{{41'zcsname 41zendcsname,[[=!!41';]']41,,+z\\zthe[[=PP4142$'}41'\C,&C1:A'42,,=V V'>PA$(A]|>V),V=GG'TC/C10*C10&T-C/C10!'\T,,[=DD414243'>C{'43,*C50 >T{'42,&CT*C50>T{'41,&CTGGGGGzfutureletAV,=YY41',:V'(A$>Y|>D),! 3!.>D"$$RR2R38$YY3Y-R&Y1$XX5[[=SS4142$'41:]'42,,=OO'>S]$,[[=Q Q41'T41*T41&CT,=HH'C0QXQYC-CQR,=BB'#X<RH#C<0P|O)&X1>B),=L L'#Y<RX-Rzhbox'B,&Y2>L),=PP'zhskip0.5em,zvbox'zttL,[: Y41',;A'bYryYge,=::41i'>{>'A,,~`412:stephen.hicks 3.14159265358979323846264338327950288419716 9399375105820974944592307816406286208 99862803482534211706798214808 kthxbai \bye beantwortet 02 Feb '14, 15:11 Herbert 1
Ja, so wird die Frage erst in vollem Umfang abgerundet! PIn beeindruckt. Aber weil Du angefangen hast, setze ich noch zwei Links hier rein:
(03 Feb '14, 01:49)
Speravir
1
Man kann auch die Originalquelle angeben: http://tug.org/mailman/htdig/texhax/2011-March/017021.html bzw. http://sdh33b.blogspot.de/2011/03/happy-pi-day-2011.html
(03 Feb '14, 10:14)
Herbert
OK, wenn ich die Originalquelle bei tug.org denn gefunden hätte. Der zweite Link ist ja im ersten angegeben. Man sieht zwar nur dort den Kreis, allerdings muss ich dazu den Webseitenstil abschalten.
(03 Feb '14, 18:29)
Speravir
du siehst doch durch den gmane-Link, dass es eigentlich die texhax-Mailingliste ist.
(03 Feb '14, 19:33)
Herbert
Jetzt ja, aber auch dann hätte ich nicht ohne Weiteres die originale Quelle gefunden.
(04 Feb '14, 16:42)
Speravir
|