
Попытка написать команду, которая создаст линию кругов с первым n
заполненным. Желаемая функциональность будет такой: \IBmark{l}{m}
где l
— длина линии, а m
— количество заполненных кругов.
Использование LaTeX
на обороте
\newcommand{\IBmark}[2]{\pgfmathparse{#1-#2}\textbf{\multido{}{#2}{\CIRCLE}\multido{}{\pgfmathresult}{\Circle}}}
Это моя лучшая попытка заставить это работать с помощью tikz
пакета, однако он возвращает это
⚫⚫⚫.0OO
Для l = 5
, и m = 3
вместо желаемого
⚫⚫⚫OO
Попытки использовать округление, разрешенное командой, pgf print
вернули худшие результаты. Я не могу найти способ устранить ошибку.
решение1
Вам необходимо добавить int(...)
к \pgfmathparse
расчету.
Кроме того, в этой реализации использование \textbf
не имеет значения и поэтому удалено.
\documentclass{article}
\usepackage{txfonts}
\usepackage{pstricks-add}
\def\CIRCLE{$\medbullet$}
\def\Circle{$\medcirc$}
\newcommand{\IBmark}[2]{\pgfmathparse{int(#1-#2)}%
\multido{}{#2}{\CIRCLE}\multido{}{\pgfmathresult}{\Circle}}
\begin{document}
\IBmark{5}{3}
\end{document}
решение2
Добро пожаловать! Из фотографий, которые я сделал, вы можете захотеть что-то вроде этого:
\documentclass{article}
\usepackage{tikz}
\newcommand{\IBmark}[2]{\begin{tikzpicture}[baseline={(X.base)},
cfill/.code={\unless\ifnum\X>#2
\tikzset{fill}
\fi}]
\path (1,-0.25ex) node (X) {\vphantom{X}}foreach \X in {1,...,#1}
{(\X*1.2em,0) node[circle,draw,minimum size=1em,cfill] {}};
\end{tikzpicture}}
\begin{document}
Hello \IBmark{5}{3}.
\end{document}
Вы можете отрегулировать вертикальное положение фантомного узла, чтобы получить любое желаемое выравнивание. В принципе, не нужно TiкZ для этого, но это, безусловно, очень легко сделать с TiкЗ.
решение3
Если мы используем OpTeX, то мы можем сделать:
\def\ibmark#1#2{\fornum 1..#1\do{\ifnum##1>#2$\circ$\else$\bullet$\fi}}
\ibmark{5}{3}
\bye