Seite 1 von 1

newcommand mag kein ^?

Verfasst: Do 11. Okt 2012, 18:16
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?

Verfasst: Do 11. Okt 2012, 19:48
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} 
  

Verfasst: Fr 9. Nov 2012, 11:41
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