PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \newcommand mit Zahlen



ooze
14-10-2010, 11:09
Moin,
gibt es irgendeine Möglichkeit sich ein Kommando wie \11 oder \22 oder so zu definieren? Ich muss haufenweise Sachen wie $a_{11}$ oder $a_{22}^2$, etc. eintippen und würde mir das durch
\newcommand{\11}{\ensuremath{a_{11}}} gerne abkürzen. Aber irgendwie scheint das nicht zu gehen. Kann man das vielleicht doch irgendwie hintricksen?

ein \einseins oder so hilft mir leider nicht weiter.

ooze

u_fischer
14-10-2010, 12:02
Im Prinzip schon


\documentclass{article}
\newcommand{\1}[1]{%
\ensuremath{a_{1#1}}}

\begin{document}
\11 \12 \1{23}
\end{document}

ooze
14-10-2010, 12:45
Im Prinzip schon


\documentclass{article}
\newcommand{\1}[1]{%
\ensuremath{a_{1#1}}}

\begin{document}
\11 \12 \1{23}
\end{document}

Oha ;-). Das ist aber auch schlau! Vielen Dank!

Falls jemand einen plausiblen Grund kennt, warum Makros der Form \123 nicht möglich sind, würde ich ihn natürlich gerne erfahren.

u_fischer
14-10-2010, 14:14
TeX hat wie alle anderen Programmiersprache Regeln "wie darf ein Befehlsname aussehen". Es gibt "ein-Zeichen-Befehle". Die können mit allen Zeichen definiert werden. Beispiele sind \% \\ \, \$ und hier \1.

Längere Befehlsnamen müssen aus Buchstaben bestehen, sie enden am ersten "Nichtbuchstabe". Was ein Buchstabe ist, entscheidet sich am catcode. So wie du @ mit \makeatletter zu einem Buchstaben machen kannst, kannst du auch Zahlen zu Buchstaben machen und dann Befehle wie \123 definieren. Das wird dir aber sehr schnell um die Ohren fliegen, wie du testen kannst, indem du mal den \setlength-Befehl auskommentierst:


\documentclass{article}

\begin{document}
\begingroup
\chardef\lettercatcode=11
\catcode`\1=\lettercatcode
\catcode`\2=\lettercatcode
\catcode`\3=\lettercatcode
\newcommand\123{blub}
\123

%\setlength\parskip{1em}
\endgroup

\end{document}