Newcommand mit If Abfrage

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Airfox
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 16. Jun 2017, 17:27

Newcommand mit If Abfrage

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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

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

Airfox
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 16. Jun 2017, 17:27

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

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

Airfox
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 16. Jun 2017, 17:27

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

\ifcsstrequal ist der falsche Test, du willst \ifstrequal.

Antworten