Seite 1 von 1

Newcommand mit If Abfrage

Verfasst: Do 27. Jul 2017, 22:57
von Airfox
Hallo Zusammen,

was ich machen will ist eigentlich einfach:
Ich möchte gerne ein Kommando schreiben das man benutzen kann mit
\msc
\msc{}{2}
\msc{g}{2}
Dabei soll je nach dem was dort steht etwas anderes passiert. Was ich probiert habe ist folgendes:
\documentclass{article}
\usepackage{graphicx}

\newcommand{\msc}[2]{
\if#1#2{
#1 #2}
\else{
oh verdammt}
\fi
}

\begin{document}
\msc{o}{olli}
\end{document}
Mein Problem ist erstmal das ich das Ergebnis nicht mal verstehe:

lli i olli

das dürfte da in gar keinem Fall dort stehen :O :?:

Verfasst: Do 27. Jul 2017, 23:26
von u_fischer
Es kommt lli o olli raus.

\if vergleicht die nächsten zwei token, in deinem Fall o aus dem ersten Argument mit o aus dem zweiten. Das ist wahr, und daher wird der Rest von #2 gedruckt (lli) nochmal #1 (o) und dann nochmal #2 (olli).


Abgesehen davon: Schau dir besser xparse an. Und mache Vergleiche mit den Tools von etoolbox oder expl3.

Verfasst: Fr 28. Jul 2017, 00:04
von Airfox
Hallo u_fischer,

danke für die schnelle Antwort. Das hat mich schon etwas weiter gebracht. Ich habe da vielleicht noch eine kleine Rückfrage, vielleicht ist es auch schon zu spät und ich sehe es einfach nicht mehr. Aber warum werden die 2 und 3 nicht richtig hochgestellt?
\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand\TwoOptOfThree{O{}O{}}%
  {\ensuremath{Q^{#1 #2}}}
\begin{document}
\TwoOptOfThree{2}{3}
$Q^{34}$
\end{document}
PS: Danke noch mal für den Tipp mit xparse. Der Autor hierhttps://www.texdev.net/2010/05/23/from- ... ntcommand/ bietet einen perfekten Einstieg, für alle die auch erleuchtet werden wollen :D

Danke schon mal :D

Verfasst: Fr 28. Jul 2017, 00:07
von u_fischer
Airfox hat geschrieben:Hallo u_fischer,

danke für die schnelle Antwort. Das hat mich schon etwas weiter gebracht. Ich habe da vielleicht noch eine kleine Rückfrage, vielleicht ist es auch schon zu spät und ich sehe es einfach nicht mehr. Aber warum werden die 2 und 3 nicht richtig hochgestellt?
\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand\TwoOptOfThree{O{}O{}}%
  {\ensuremath{Q^{#1 #2}}}
\begin{document}
\TwoOptOfThree{2}{3}
$Q^{34}$
\end{document}
PS: Danke noch mal für den Tipp mit xparse. Der Autor hierhttps://www.texdev.net/2010/05/23/from- ... ntcommand/ bietet einen perfekten Einstieg, für alle die auch erleuchtet werden wollen :D

Danke schon mal :D
Wenn du einen Befehl mit optionalen Argumenten definierst, musst du eckige Klammern benützen-

Verfasst: Fr 28. Jul 2017, 11:27
von Airfox
Hallo u_fischer,

vielen Dank noch mal für deine Antwort. Jetzt bin ich denke ich schon auf dem richtigen Wege, aber mir machte eine Sache etwas Kopfzerbrechen. Ich glaube hier ist was kaputt,...oder ich übersehe etwas,...

Bitte einmal das Auskommentierte wechseln,...also die die Spalten dadrunter auskommentieren und die dadrüber ein.
\documentclass{article}
\usepackage{xparse}
\usepackage{etoolbox}

\NewDocumentCommand\TwoOptOfThree{O{}O{}}%
{
	\ifstrempty{#1#2}
	{
	\ensuremath{A^{#1 #2}}
	}
	{
%	\ifcsstrequal{#1}{g}{true}{false}
	\ifcsstrequal{#1}{l}{true}{false}
	}
}
\begin{document}

%\TwoOptOfThree[g][b]
\TwoOptOfThree[l][b]
\end{document}
Ich hoffe das ergibt bei dir auch beim zweiten mal ein false und kein true, weil dann stimmt hier irgendwas nicht :?: :?: :?:

Danke noch mal für deine Hilfe :D

Verfasst: Fr 28. Jul 2017, 11:48
von u_fischer
\ifcsstrequal ist der falsche Test, du willst \ifstrequal.