newcommand mit IfEqCase

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: newcommand mit IfEqCase

Re: newcommand mit IfEqCase

von huebi » So 14. Nov 2021, 15:58

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

Re: newcommand mit IfEqCase

von Grummelgast » So 14. Nov 2021, 14:53

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

von Grummelgast » So 14. Nov 2021, 14:48

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}

newcommand mit IfEqCase

von huebi » So 14. Nov 2021, 14:32

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


Nach oben