Seite 1 von 1
newcommand mit IfEqCase
Verfasst: So 14. Nov 2021, 14:32
von huebi
Moin,
ich versuche ein Makro zu schreiben welches Einzahl/Mehrzahl unterscheiden kann. Also darauf reagieren ob es als Parameter "1", "eine" oder etwas anderes bekommt.
Das hier funktioniert:
\documentclass{scrbook}
\usepackage{xstring}
\newcommand{\xxx}[1]
{
\IfEqCase{#1}{
{1}{\textbf{#1 Mi\-nu\-te}}
{eine}{\textbf{#1 Mi\-nu\-te}}
}[\textbf{#1 Mi\-nu\-ten}]
}
\begin{document}
Hallo Welt! \xxx{eine}
\end{document}
Mit der eins funktioniert es auch
\documentclass{scrbook}
\usepackage{xstring}
\newcommand{\xxx}[1]
{
\IfEqCase{#1}{
{1}{\textbf{#1 Mi\-nu\-te}}
{eine}{\textbf{#1 Mi\-nu\-te}}
}[\textbf{#1 Mi\-nu\-ten}]
}
\begin{document}
Hallo Welt! \xxx{1}
\end{document}
Wenn ich es jedoch mit "viele" probiere
\documentclass{scrbook}
\usepackage{xstring}
\newcommand{\xxx}[1]
{
\IfEqCase{#1}{
{1}{\textbf{#1 Mi\-nu\-te}}
{eine}{\textbf{#1 Mi\-nu\-te}}
}[\textbf{#1 Mi\-nu\-ten}]
}
\begin{document}
Hallo Welt! \xxx{viele}
\end{document}
bekomme ich die Fehlermeldung
File ended while scanning use of \xs_testcase.
Wenn ich mir die Doku auf ctan zu xstring anschaue (section 2,1,11) kann ich einfach nicht erkennen was ich falsch mache.
Den other Zweig krieg ich einfach nicht hin. Die Fehlermeldung und deren google Ergebnisse helfen mir leider auch nicht weiter.
//huebi
Re: newcommand mit IfEqCase
Verfasst: So 14. Nov 2021, 14:48
von Grummelgast
Achte auf unerwünschte, aber signifikante Leerzeichen im Code! Und wenn man die Sprache richtig einstellt, funktioniert auch die Trennung von Minute, ohne dass man alle Trennstellen angeben muss.
\documentclass[ngerman]{scrbook}
\usepackage{babel}
\usepackage{xstring}
\newcommand{\xxx}[1]
{%
\IfEqCase{#1}{%
{1}{\textbf{#1 Minute}}%
{eine}{\textbf{#1 Minute}}%
}[\textbf{#1 Minuten}]%
}
\begin{document}
Hallo Welt! \xxx{viele}
\end{document}
Re: newcommand mit IfEqCase
Verfasst: So 14. Nov 2021, 14:53
von Grummelgast
Man kann das übrigens noch optimieren, beispielsweise:
\documentclass[ngerman]{scrbook}
\usepackage{babel}
\usepackage{xstring}
\newcommand{\xxx}[1]
{%
\textbf{#1 Minute%
\IfEqCase{#1}{%
{1}{}%
{eine}{}%
}[n]%
}%
}
\begin{document}
Hallo Welt! \xxx{viele}
\end{document}
Allerdings bin ich mir nicht sicher, ob bei dieser maximalen Optimierung die Trennung noch automatisch funktioniert. Aber, wie man Trennstellen einbaut, weißt du ja offensichtlich schon.
Re: newcommand mit IfEqCase
Verfasst: So 14. Nov 2021, 15:58
von huebi
Moin,
Sprachzeugs ist zur Problemerkennung und -behebung nicht notwendig, daher habe ich das weggelasen sonst wär das MWE ja kein MWE mehr. Die Trennstriche habe ich schon mal weggelassen, ob sie evtl das Problem verursachen, war aber nicht so. Ich hab sie trotzdem dringelassen
Problem solved , danke und abgehakt.
//huebi