LaTeX: Probleme mit \newcommand + Argumente
************************************************** **************
GELÖST (siehe letzter Post)
************************************************** **************
Hi,
ich habe weniger Probleme mit der Definition eines neuen Befehl, vielmehr
mit den Argumenten.
Der Kontext: Ich schreibe gerade ein Pflichtenheft. Ich habe mir eine
neue Umgebung für die Produkt-Funktionen gebaut, die die Funktionen
mit /F 00x/ nummeriert. Das funktioniert einwandfrei, bloss möchte
ich, sobald ich über \ref{} auf eine Funktion verweise, auch im Text
"/F 00x/" stehen haben.
Aber erstmal die relevanten Code-Ausschnitte:
Hauptdatei:
Code:
\usepackage{fmtcount} % Brauch ich, um Counter zu manipulieren
% counter müssen (anscheinend ?) in der Haupt-Datei definiert werden.
\newcounter{function}
\setcounter{function}{0}
\newcounter{functionhelper}
\setcounter{functionhelper}{0}
\newcounter{functionref}
\setcounter{functionref}{0}
Die Kommandos werden in einer externen Datei definiert:
Code:
% The item for the new environment 'funlist'
\newcommand{\fun}[1]{\item \textbf{\textsf{#1}} }
\newcommand{\funref}[1]{/F\padzeroes[3]\decimalnum{#1}/} % ***
\newenvironment{funlist}
{% This is the begin code
\begin{list}{\textbf{\textsf{\textit{/F\padzeroes[3]\decimal{function}/}}}}
{\usecounter{function} \setlength{\rightmargin}{\rightmargin}}
\setcounter{function}{\thefunctionhelper}
}
{% This is the end code
\setcounter{functionhelper}{\thefunction}
\end{list}
}
In der Umgebung musste ich ein bisschen tricksen, weil der Zähler bei \end{} immer zurückgesetzt wurde.
Im Text sollte das dann so ausschauen:
Code:
\begin{funlist}
(...)
\fun{Bla}\label{bla-label}
(...)
\end{funlist}
Referenziert soll das dann so werden (Definition: siehe ***):
Code:
(...)Bla,bla wie \funref{\ref{bla-label}}
Dabei kommt die Fehlermeldung:
Code:
! Missing number, treated as zero.
Nach googeln hab ich herausgefunden, dass das mit fehlenden
Argumenten oder falscher Argument-Reihenfolge zu tun haben soll.
Naja...Ich denke meine Definition und Verwendung ist in Ordnung.
Möglicherweise liegt der Hund im Paket fmtcount begraben. Übergebe ich
nämlich \funref eine Zahl, funktioniert das einwandfrei.
Ich hatte noch andere Ansätze, bei der ich z.B. \funref nur das Label übergeben habe, aber auch diese scheiterten meist mit der gleichen Fehlermeldung.
Vielen Dank schon mal für das Durchlesen :)
Markus
P.S.: Die vielen code-Umgebungen möge man mir verzeihen. Ich mach künftig weniger, wenn das zuviel ist.
Beispiel zu meinem Problem:
Hi,
entschuldigung, wusste nach den Board-Regeln zwar, dass sich das gehört,
dachte aber das ganze ist zu umfangreich.
Das beispiel verwendet bei mir unicode. Könnte bei euch Probleme machen. Hab die Stelle mal gekennzeichnet.
Hier mal (kompilierbar, die nicht-funktionierenden Versionen sind auskommentiert) ein einfaches Beispiel:
Code:
\documentclass[a4paper,pointlessnumbers]{scrartcl}
\usepackage[utf8]{inputenc} % <--- Könnte Probleme machen.
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{float}
\usepackage{fmtcount}
% paragraph formatting:
\setlength{\parindent}{0ex}
\setlength{\parskip}{1ex plus0.3ex minus0.1ex}
\newcounter{function}
\setcounter{function}{0}
\newcounter{functionhelper}
\setcounter{functionhelper}{0}
\newcounter{functionref}
\setcounter{functionref}{0}
\newcommand{\fun}[1]{\item \textbf{\textsf{#1}} }
\newcommand{\funref}[1]{ /F\padzeroes[3]\decimalnum{#1}/}
\newcommand{\ofunref}[1]{/F\padzeroes[3]\decimalnum{\ref{#1}}/}
\newenvironment{funlist}
{% This is the begin code
\begin{list}{\textbf{\textsf{\textit{/F\padzeroes[3]\decimal{function}/}}}}
{\usecounter{function} \setlength{\rightmargin}{\rightmargin}}
\setcounter{function}{\thefunctionhelper}
}
{% This is the end code
\setcounter{functionhelper}{\thefunction}
\end{list}
}
\title{Beispiel}
\author{Icke}
\begin{document}
\restylefloat{figure}
\clubpenalty = 10000
\widowpenalty = 10000
\displaywidowpenalty = 10000
\maketitle
\newpage
\section{Produkt-Funktionen}
Bei dieser, funktionierenden, Version kann der Befehl funref das label nicht auflösen.
Das Kommando ofunref funktioniert nicht, es soll aber so (zumindest in der Richtung)
funktionieren.
\subsection{Diese Funktionen}
\begin{funlist}
\fun{Ich will referenziert werden}\label{label}
Ich bin wichtig.
\end{funlist}
\subsection{Andere Funktionen}
Und noch richtig Text.
\begin{funlist}
\fun{Hier geht es um die Wurst}
Ich möchte Funktion \funref{1} referenzieren.
Aber \begin{verbatim}
\funref{\ref{label}}
\end{verbatim}
funktioniert nicht. Vgl. %\funref{\ref{label}}
Oder ofunref mit Parameter label: %\ofunref{label}
\end{funlist}
\end{document}
Hoffentlich hilft das.
Und Danke nochmals..
Markus