¿Cómo puedo escribir un comando LaTex con 'si'-'entonces'-'si no'?

¿Cómo puedo escribir un comando LaTex con 'si'-'entonces'-'si no'?

Yo leoLaTeX \ si condicióny¿Cómo escribir si y entonces en algoritmo?, pero hasta ahora no me ha sonado de nada.

Estoy intentando crear un comando llamadopunteadoHabilidadcomo abajo. La lógica detrás de esto es:

  • recibir dos parametros
  • iterar sobre el contador x de 1 a #2
  • si mi contador lleno es > 0, dibujo un punto completo y disminuyo el contador
  • de lo contrario dibujo un punto vacío
\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
    }
}%

No estoy seguro de si el problema está en la definición del comando o en algún otro lugar, pero cuando lo invoco en mi archivo aparece:

  • Secuencia de control Indefinido. \dottedSkill{2}{9}.
  • Número faltante, tratado como cero. \dottedSkill{2}{9}
  • Secuencia de control Indefinido. \dottedSkill{2}{9}.
  • Número faltante, tratado como cero. \dottedSkill{2}{9}

¿Mi función está escrita correctamente?

Respuesta1

El problema actual con tu configuración es que estás definiendo el filledcontadorcadatiempo que corres \dottedSkill. Deberías sacar estas definiciones de tu \dottedSkillcomando.

Además, sólo debes dibujar los círculos rellenos, seguidos de los círculos vacíos:

ingrese la descripción de la imagen aquí

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

multidofunciona similar aforlooppara iterar sobre algún valor.

Respuesta2

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

ingrese la descripción de la imagen aquí

Respuesta3

La primera pregunta para mí es si realmente necesitas el condicional. Sólo en el caso de un problema XY (el verdadero problema no es hacer que el bucle funcione, sino hacer una puntuación con una macro con dos argumentos) aquí hay un enfoque más simple:

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}

Respuesta4

Gracias a todos ustedes pude afinar mi solución para eso.

Utilicé como referencia para los tipos de círculo este enlace: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-en-látex/

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

información relacionada