newcommand mit IfEqCase Thema ist als GELÖST markiert

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


huebi
Forum-Anfänger
Forum-Anfänger
Beiträge: 46
Registriert: So 7. Nov 2021, 12:53

newcommand mit IfEqCase

Beitrag 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


Grummelgast

Re: newcommand mit IfEqCase

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

Grummelgast

Re: newcommand mit IfEqCase

Beitrag 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:


huebi
Forum-Anfänger
Forum-Anfänger
Beiträge: 46
Registriert: So 7. Nov 2021, 12:53

Re: newcommand mit IfEqCase

Beitrag 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


Antworten