Wie kann ich einen LaTex-Befehl mit ‚if‘-‚then‘-‚else‘ schreiben?

Wie kann ich einen LaTex-Befehl mit ‚if‘-‚then‘-‚else‘ schreiben?

ich leseLaTeX \if-BedingungUndWie schreibt man „wenn“ und „dann“ in einem Algorithmus?, aber bisher hat es bei mir nichts geklingelt.

Ich versuche, einen Befehl namensgepunkteteFähigkeitwie unten. Die Logik dahinter ist:

  • Empfangen von zwei Parametern
  • iteriere über den Zähler x von 1 bis #2
  • Wenn mein Zähler gefüllt > 0 ist, zeichne ich einen vollen Punkt und dekrementiere den Zähler
  • sonst zeichne ich einen leeren Punkt
\newcommand{\dottedSkill}[2]{
    %parameter 1 the filled dots
    %parameter 2 the max dots

    \newcounter{x}
    \newcounter{filled}
    \setcounter{filled}{#1}
    \forloop{x}{1}{\value{x} <= #2}
    {
        \ifnum \filled<1
            \Circle
        \else
            \CIRCLE
            \addtocounter{filled}{-1}
        \fi
    }
}%

Ich bin nicht sicher, ob das Problem bei der Befehlsdefinition oder woanders liegt, aber wenn ich ihn für meine Datei aufrufe, erhalte ich:

  • Undefinierte Steuersequenz. \dottedSkill{2}{9}.
  • Fehlende Zahl, wird als Null behandelt. \dottedSkill{2}{9}
  • Undefinierte Steuersequenz. \dottedSkill{2}{9}.
  • Fehlende Zahl, wird als Null behandelt. \dottedSkill{2}{9}

Ist meine Funktion richtig geschrieben?

Antwort1

Das aktuelle Problem mit Ihrem Setup ist, dass Sie den filledZähler definierenjedenwenn Sie ausführen \dottedSkill. Sie sollten diese Definitionen aus Ihrem \dottedSkillBefehl entfernen.

Außerdem sollten Sie nur die ausgefüllten Kreise und anschließend die leeren Kreise zeichnen:

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{multido}

\newcommand{\Circle}{\textbullet}
\newcommand{\CIRCLE}{$\circ$}

\newcommand{\dottedSkill}[2]{%
  %parameter 1 the filled dots
  %parameter 2 the max dots  
  \multido{\ix=1+1}{#1}{\Circle}%
  \ifnum#1<#2 \multido{\ix=#1+1}{\numexpr#2-#1}{\CIRCLE}\fi
}%

\begin{document}

\dottedSkill{2}{9}

\dottedSkill{0}{9}

\dottedSkill{10}{9}

\dottedSkill{5}{9}

\end{document}

multidofunktioniert ähnlich wieforloopum über einen Wert zu iterieren.

Antwort2

\documentclass{article}
\usepackage{forloop}
\newcounter{x}
\newcounter{filled}
\newcommand{\dottedSkill}[2]{%
    %parameter 1 the filled dots
    %parameter 2 the max dots
    \setcounter{filled}{#1}%
    \forloop{x}{0}{\value{x} < #2}%
    {%
        \ifnum \thefilled < 1 
            $\circ$%\Circle
        \else 
            $\bullet$%\CIRCLE 
            \addtocounter{filled}{-1}%
        \fi
    }%
}%
\begin{document}
\dottedSkill{2}{9}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Die erste Frage an mich ist, ob Sie wirklich die Bedingung brauchen. Nur im Fall des XY-Problems (das wahre Problem besteht nicht darin, die Schleife zum Laufen zu bringen, sondern eine Punktzahl mit einem Makro mit zwei Argumenten zu erzielen) gibt es hier einen einfacheren Ansatz:

mwe

\documentclass{article}
\newcommand\score[2][10]{
\makebox[#2em]{\cleaders\hbox to 1em{\Large\hss$\bullet$\hss}\hfill}%
\makebox[\dimexpr#1em-#2em]{\cleaders\hbox to 1em{\Large\hss$\circ$\hss}\hfill}\par} 
\begin{document}
\score[5]{0} 
\score[5]{1}
\score[5]{3}
\score[5]{5}
\score{0} 
\score{3} 
\score{6}
\score{10}
\end{document}

Antwort4

Dank euch allen konnte ich meine Lösung entsprechend optimieren.

Als Referenz für die Kreistypen habe ich diesen Link verwendet:https://aneescraftsmanship.com/circle-symbols%E2%97%8B%E2%97%8F%E2%97%8D%E2%97%97%E2%97%94%E2%97%99%E2%A6%BF-in-latex/

\usepackage{wasysym}

\newcommand{\EmptyDot}{\Circle}
\newcommand{\FilledDot}{$\CIRCLE$}

\newcommand{\dottedSkill}[2]{%
    %parameter 1 the filled dots
    %parameter 2 the max dots  
    \multido{\ix=1+1}{#1}{\FilledDot}%
    \ifnum#1<#2 \multido{\ix=#1+1}{\numexpr#2-#1}{\EmptyDot}\fi
}%

verwandte Informationen