newcommand mag kein ^?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Lala
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: Do 4. Okt 2012, 00:30

newcommand mag kein ^?

Beitrag von Lala »

Bei folgendem Header erhalte ich folgende Fehlermeldung:
\documentclass[a4paper,twocolumn,fontsize=12pt,parskip]{scrartcl}
\usepackage[ngerman]{babel} 								
\usepackage[latin9]{inputenc}								
\usepackage[T1]{fontenc}				
\usepackage{amsmath} 									
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{blindtext}									

% Eigene Befehle
\newcommand{\td}{\text{d}}
\renewcommand{\d}{\partial}
\newcommand{\bG}{\bar{G}}
\newcommand{\bK}{\bar{K}}
\newcommand{\C2}[1]{C^2(#1)}
\newcommand{\C1}[1]{C^1(#1)}
\newcommand{\C}[1]{C(#1)}

\title{}
\author{Lala}
\date{\today}											
							
\begin{document}

\blindtext[50]

\end{document}
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.54 \newcommand*{\C2}[1]{C^2(#1)}
You're in trouble here. Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
! Missing $ inserted.
<inserted text>
$
l.54 \newcommand*{\C2}[1]{C^2(#1)}
I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.


Achja und gegen die # hatte er auch was...
Kann man sich sowas also nicht definieren?

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

So kannst du das nicht machen. Eins wird als neues Token interpretiert. Deshlab der Fehler mit dem Mathe modus hat das da nix zu tun. Der fehler bezieht sich auf ein nicht-command token im header.

So kannst du das machen:
\documentclass[a4paper,twocolumn,fontsize=12pt,parskip]{scrartcl} 
\usepackage[ngerman]{babel}                         
\usepackage[latin9]{inputenc}                         
\usepackage[T1]{fontenc}             
\usepackage{amsmath}                             
\usepackage{amsfonts} 
\usepackage{amssymb} 
                        

% Eigene Befehle 
\newcommand{\td}{\text{d}} 
\renewcommand{\d}{\partial} 
\newcommand{\bG}{\bar{G}} 
\newcommand{\bK}{\bar{K}} 
% so 
\newcommand{\ca}[1]{C^2(#1)} 
%oder so
\expandafter\newcommand\csname C2 \endcsname[1]{C^1(#1)} 
%% newcommand wird verzögert bis csname fertig ist. 

\newcommand{\C}[1]{C(#1)} 

                           
                       
\begin{document} 
hallo
$\ca{a}$
$\C2{b}$
\end{document} 
  
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Das Problem sind folgende Definitionen:
\newcommand{\C1}[1]{C^1(#1)}
\newcommand{\C2}[1]{C^2(#1)}
Um konkret zu sein ist die 1 bzw. die 2 im Befehlsnamen der Knackpunkt. Als Zeichen eines Makronamens sind entweder nur Zeichen mit Kategorie-Code »letter« erlaubt (was ohne Änderungen des Standardverhaltens Groß- und Kleinbuchstaben sind) oder ein Charakter mit Kategorie-Code »other« (wozu auch arabische Ziffern zählen). Langer Rede kurzer Sinn: »\C2« ist als Makroname nicht möglich/erlaubt. Es gibt natürlich Wege, das zu umgehen (\csname ... \endcsname) aber meiner Meinung nach wäre das einfachste, ein begrenztes Argument einzuführen:
\documentclass{scrartcl}
\def\C#1(#2){%
  C\ifx\relax#1\relax\else ^{#1}\fi(#2)}
\begin{document}

\[ \C(x) \C1(x) \C2(x) \]
\[ C(x) C^1(x) C^2(x) \]

\end{document}
Wo allerdings der große Vorteil gegenüber der direkten Eingabe in diesem Fall ist, ist mir unklar.

Grüße
Clemens
Paketauthor

Antworten