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. :wink:


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