「if」-「then」-「else」を含む LaTex コマンドを記述するにはどうすればよいですか?

「if」-「then」-「else」を含む LaTex コマンドを記述するにはどうすればよいですか?

私は読むLaTeX \if 条件そしてアルゴリズムで if と then をどのように記述しますか?、しかし今のところ、私にはピンと来ませんでした。

というコマンドを作成しようとしています点線スキル以下のように。その背後にあるロジックは次のとおりです。

  • 2つのパラメータを受け取る
  • カウンタ x を 1 から #2 まで繰り返します
  • カウンターが0より大きい場合は、完全なドットを描画し、カウンターを減算します。
  • そうでなければ空の点を描きます
\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
    }
}%

問題がコマンド定義にあるのか、それとも他の場所にあるのかはわかりませんが、ファイルでコマンドを呼び出すと、次のようになります。

  • 未定義の制御シーケンス。\dottedSkill{2}{9}。
  • 欠損値はゼロとして扱われます。\dottedSkill{2}{9}
  • 未定義の制御シーケンス。\dottedSkill{2}{9}。
  • 欠損値はゼロとして扱われます。\dottedSkill{2}{9}

関数は適切に記述されていますか?

答え1

現在の設定の問題は、filledカウンターを定義していることですを実行するたびに\dottedSkill、これらの定義をコマンドから取り出す必要があります\dottedSkill

また、塗りつぶされた円を描き、その後に空白の円を描きます。

ここに画像の説明を入力してください

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

multido似たような作品forloopある値を反復処理します。

答え2

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

ここに画像の説明を入力してください

答え3

最初に私が尋ねたいのは、条件文が本当に必要かどうかです。XY 問題の場合のみ (本当の問題はループを機能させることではなく、2 つの引数を持つマクロでスコアを作成することです)、より簡単な方法は次のとおりです。

ムウェ

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

答え4

皆さんのおかげで、私はその解決策を微調整することができました。

円の種類については、このリンクを参考にしました: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
}%

関連情報