Seite 1 von 2

Bestimmte Worte ersetzen

Verfasst: Mo 21. Nov 2016, 22:03
von CallMeBW
Hallo,

ich benötige ein Makro mit einem Argument und folgender Funktionsweise:
Das Argument wird überprüft. Falls es der Zahl "1" entspricht, wird "erste" zurückgegeben.
Falls es der Zahl "2" entspricht wird "zweite" zurückgegeben usw.
Ich benötige also eine Funktion, die aus Zahlen deutsche Zahlworte bildet. Mir reicht es, wenn die ersten 12 Zahlworte abgedeckt sind. Ist das Argument nicht eine Zahl zwischen 1 und 11, so soll einfach das Argument selbst zurückgegeben werden.

Beipsiel:
\zahlwort{1} % soll "erste" schreiben
\zahlwort{11} % soll "elfte" schreiben
\zahlwort{14} % soll "14" schreiben
.

Verfasst: Mo 21. Nov 2016, 23:01
von iTob
Da geht mit \ifcase, der beginnt allerdings bei Null, weshalb du vorher vom Argument eins abziehen musst. Ich hatte jetzt keine Lust auf dem Tablett alle Fälle einzutippen, aber das Prinzip sollte hier klar werden.
\documentclass[11pt]{article}

\newcounter{zahl}
\newcommand{\zahlwort}[1]{%
   \setcounter{zahl}{#1}%
   \addtocounter{zahl}{-1}%
   \ifcase\value{zahl}\relax
      eins%
   \or
      zwei%
   \or
      drei%
   \else
      #1%
   \fi
}

\begin{document}
\zahlwort{1}

\zahlwort{2}

\zahlwort{10}
\end{document}
Es findet allerdings keine Fehlerbehandlung statt für Fälle, in denen du keine Zahl als Argument übergibts …


Gute Nacht
Tobi

Verfasst: Mo 21. Nov 2016, 23:11
von CallMeBW
Nabend Tobi,

vielen Dank für die schnelle und tolle Antwort. Wird gleich morgen früh umgesetzt ;)

Verfasst: Di 22. Nov 2016, 08:16
von Gast
Statt die Zahl extra um eins zu vermindern, kann man den ersten Fall natürlich auch einfach leer lassen oder mit einer Fehlermeldung versehen oder "null" zurück geben oder ….
\newcommand{\zahlwort}[1]{%
   \ifcase #1\relax
     null% oder #1% oder Fehlermeldung
   \or
      eins%
   \or
      zwei%
   \or
      drei%
   \else
      #1%
   \fi
}

Verfasst: Di 22. Nov 2016, 10:12
von CallMeBW
Danke, das funktioniert schonmal klasse. Jetzt stehe ich allerdings vor der nächsten Schwierigkeit, die ich nicht bedacht hatte :D

Und zwar möchte ich gerne den Satz "Im zweiten Kapitel wird die Funktionsweise beschrieben" mit meiner neuen Funktion ersetzen:
Im \zahlwort{\ref{grundlagen}n Kapitel wird die Funktionsweise beschrieben
.
Das Problem ist, dass die Funktion eine Zahl erwartet, aber \ref{} gibt ein String zurück (Es könnte sich ja um Kapitel 2.2 handeln, dann ist das natürlich keine gültige Zahl).
ich möchte die Funktion aber tatsächlich nur mit chaptern verwenden, deren Referenz eine Zahl ist. In meinem Dokument liefert bspw.
\ref{grundlagen} %liefert "2" zurck
die Zahl zwei zurück.
Ich bräuchte also entweder eine Möglichkeit, de String in eine zahl umzuwandeln, oder ein ifcase-Konstrukt, das mit String umgeht :D

Wie könnte man das lösen?

Verfasst: Di 22. Nov 2016, 10:17
von u_fischer
Du kannst mit zref die Zählerstände der counter abspeichern und dann abfragen.

Verfasst: Di 22. Nov 2016, 10:56
von CallMeBW
kann ich zref dann auch mit einem label verwenden? Denn ich möchte ja nicht nur über das aktuelle Kapitel schreiben, sondern bspw. in Kapitel 1 auf das zweite Kapitel verweisen?!
Wäre nett wenn du mir zeigen könntest wie man das mit zref umsetzt.

Verfasst: Di 22. Nov 2016, 11:01
von u_fischer
Wäre nett wenn du mir zeigen könntest wie man das mit zref umsetzt.
Es wäre nett, wenn du etwas Eigeninitiative zeigen würdest und nicht alle Arbeit auf die anderen abschiebst.

zref hat eine Dokumentation und ein Minimalbeispiel hast du auch nicht geliefert.

https://tex.stackexchange.com/search?q=zref+chapter[/code]

Verfasst: Di 22. Nov 2016, 23:02
von CallMeBW
Nun habe ich mal ein Minimalbeispiel aufgesetzt.
Anhand des Codes sieht man, wie schön bereits die Funktion für das zuordnen von Zahlworten funktioniert. Mir ist allerdings nicht klargeworden, wie ich zref verwenden kann. ein Benutzer schlägt vor,
\zref@newprop{chapter}{\thechapter}
zu verwenden. Das hat aber nicht geklappt.

Ich hoffe, mir kann jemand helfen, das Problem vollends fertig zu lösen. Schließlich habe ich die Frage ja gestellt, weil ich es selbst nicht hinbekommen habe. Das Minimalbeispiel kann dafür gerne als Voraussetzung genommen werden :)
\documentclass[11pt]{scrreprt}
\usepackage[user]{zref}


\newcommand{\zahlwort}[1]{%
   \ifcase #1\relax
     #1.%
   \or
      erste%
   \or
      zweite%
   \or
      dritte%
  \or
      vierte%
  \or
      fünfte%
  \or
      sechste%
  \or
      siebte%
  \or
      achte%
  \or
      neunte%
  \or
      zehnte%
  \or
      elfte%
  \or
      zwölfte%
   \else
      #1.%
   \fi
}

\begin{document}
\zahlwort{0}\\
%\zahlwort{dasistkeineZahl}
\zahlwort{1}\\
\zahlwort{2}\\
\zahlwort{3}\\
\zahlwort{4}\\
\zahlwort{5}\\
\zahlwort{6}\\
\zahlwort{7}\\
\zahlwort{8}\\
\zahlwort{9}\\
\zahlwort{10}\\
\zahlwort{11}\\
\zahlwort{12}\\
\zahlwort{13}\\

\chapter{Kapitel Eins}
\label{chap:eins}
Das ist ein Text in Kapitel \ref{chap:eins}.

Folgendes funktioniert: Im \zahlwort{2}n Kapitel geht es um was anderes.

Folgendes hingegen nicht: %Im \zahlwort{\ref{chap:zwei}}n Kapitel geht es um was anderes.
\chapter{Kapitel Zwei}
\label{chap:zwei}
\end{document}
[/code]

Verfasst: Di 22. Nov 2016, 23:52
von u_fischer
\documentclass[11pt]{scrreprt}
\usepackage[user,counter]{zref}
\makeatletter
\zref@newprop{chapter}[1]{\the\c@chapter}
\zref@addprop{main}{chapter}
\newcommand\refchapterasnum[1]{\zref@extractdefault {#1} {chapter} {0}}
\makeatother


\newcommand{\zahlwort}[1]{%
   \ifcase #1\relax
     #1.%
   \or
      erste%
   \or
      zweite%
   \or
      dritte%
  \or
      vierte%
  \or
      fünfte%
  \or
      sechste%
  \or
      siebte%
  \or
      achte%
  \or
      neunte%
  \or
      zehnte%
  \or
      elfte%
  \or
      zwölfte%
   \else
      #1.%
   \fi
}

\begin{document}
\zahlwort{0}\\
%\zahlwort{dasistkeineZahl}
\zahlwort{1}\\
\zahlwort{2}\\
\zahlwort{3}\\
\zahlwort{4}\\
\zahlwort{5}\\
\zahlwort{6}\\
\zahlwort{7}\\
\zahlwort{8}\\
\zahlwort{9}\\
\zahlwort{10}\\
\zahlwort{11}\\
\zahlwort{12}\\
\zahlwort{13}\\

\chapter{Kapitel Eins}
\label{chap:eins}
Das ist ein Text in Kapitel \ref{chap:eins}.

Folgendes funktioniert: Im \zahlwort{2}n Kapitel geht es um was anderes.

Folgendes hingegen nicht: Im \zahlwort{\refchapterasnum{chap:zwei}}n Kapitel geht es um was anderes.
\chapter{Kapitel Zwei}
\label{chap:zwei}\zlabel{chap:zwei}
\end{document}