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 filled
contadorcadatiempo que corres \dottedSkill
. Deberías sacar estas definiciones de tu \dottedSkill
comando.
Además, sólo debes dibujar los círculos rellenos, seguidos de los círculos vacíos:
\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
funciona similar aforloop
para 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}
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:
\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
}%