goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bestimmte Worte ersetzen

 

CallMeBW
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 20.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 23:03     Titel: Bestimmte Worte ersetzen
  Antworten mit Zitat      
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:
Code • Öffne in Overleaf
\zahlwort{1} % soll "erste" schreiben

Code • Öffne in Overleaf
\zahlwort{11} % soll "elfte" schreiben

Code • Öffne in Overleaf
\zahlwort{14} % soll "14" schreiben
.
Private Nachricht senden Benutzer-Profile anzeigen

iTob
Forum-Meister
Forum-Meister


Beiträge: 1184
Anmeldedatum: 19.04.10
Wohnort: ---
Version: TeX Live auf OS X
     Beitrag Verfasst am: 22.11.2016, 00:01     Titel:
  Antworten mit Zitat      
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.

Code • Öffne in Overleaf
\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
_________________

Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).
Private Nachricht senden Benutzer-Profile anzeigen

CallMeBW
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 20.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 00:11     Titel:
  Antworten mit Zitat      
Nabend Tobi,

vielen Dank für die schnelle und tolle Antwort. Wird gleich morgen früh umgesetzt Wink
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 09:16     Titel:
  Antworten mit Zitat      
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 ….
Code • Öffne in Overleaf
\newcommand{\zahlwort}[1]{%
   \ifcase #1\relax
     null% oder #1% oder Fehlermeldung
   \or
      eins%
   \or
      zwei%
   \or
      drei%
   \else
      #1%
   \fi
}
 

CallMeBW
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 20.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 11:12     Titel:
  Antworten mit Zitat      
Danke, das funktioniert schonmal klasse. Jetzt stehe ich allerdings vor der nächsten Schwierigkeit, die ich nicht bedacht hatte Very Happy

Und zwar möchte ich gerne den Satz "Im zweiten Kapitel wird die Funktionsweise beschrieben" mit meiner neuen Funktion ersetzen:
Code • Öffne in Overleaf
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.
Code • Öffne in Overleaf
\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 Very Happy

Wie könnte man das lösen?
Private Nachricht senden Benutzer-Profile anzeigen

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3554
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 11:17     Titel:
  Antworten mit Zitat      
Du kannst mit zref die Zählerstände der counter abspeichern und dann abfragen.
_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

CallMeBW
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 20.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 11:56     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3554
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 12:01     Titel:
  Antworten mit Zitat      
Zitat:
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]
_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

CallMeBW
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 20.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2016, 00:02     Titel:
  Antworten mit Zitat      
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,
Code • Öffne in Overleaf
\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 Smile

Code • Öffne in Overleaf
\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]

output.png
 Beschreibung:
Anbei der Output des Minimalbeispiels

Download
 Dateiname:  output.png
 Dateigröße:  9.85 KB
 Heruntergeladen:  47 mal
Private Nachricht senden Benutzer-Profile anzeigen

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3554
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2016, 00:52     Titel:
  Antworten mit Zitat      
Code • Öffne in Overleaf

\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}

_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen Gehe zu Seite 1, 2  Weiter



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de