带有变量计数器的 Latex 中的基本循环。我想插入 x 个空格...
\newcommand{\insertspace}[1]{
\newcount\foo
\foo={#1}
\loop
~
\advance \foo -1
\ifnum \foo>0
\repeat
}
此调用给我一个错误:Missing number, treated as zero.
我认为这是由于 foo 计数器无法识别参数。(drawbox 在 MWE 中定义)
\drawbox{black!100}{5.2cm}{\insertspace{7} Hi im box}
结果:
如果计数器是静态的,则 insertspace 循环会起作用。当我在其他地方引用该参数时,它也会显示该参数。这与数据类型有关吗?
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\newcommand{\insertspace}[1]{
\newcount\foo
\foo={#1}
\loop
~~ hi
\advance \foo -1
\ifnum \foo>0
\repeat
}
\newcommand{\drawbox}[3]{ % 1->color ---- 2 -> width of box ----- 3-> text
\begin{tikzpicture}
\node[draw, fill={#1},rectangle,text width={#2}, text = white] {\color{white}\fontsize{6pt}{6pt}\selectfont #3};
\end{tikzpicture}
}
\drawbox{black!100}{5.2cm}{\insertspace{7} Hi im box}
\end{document}
答案1
您几乎已经成功了。
只需进行一些修改即可使其正常工作:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcount\foo
\newcommand{\insertspace}[1]{%
\foo=#1\relax
\loop
~%
\advance\foo-1 %
\ifnum \foo>0 %
\repeat
\ignorespaces
}%
\newcommand{\drawbox}[3]{% 1->color ---- 2 -> width of box ----- 3-> text
\begin{tikzpicture}
\node[draw, fill={#1},rectangle,text width={#2}, text = white] {\color{white}\fontsize{6pt}{6pt}\selectfont #3};
\end{tikzpicture}%
}%
\begin{document}
\drawbox{black!100}{5.2cm}{\insertspace{7}Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{7} Hi im box}
\end{document}
也许你对不使用 -register 的变体感兴趣\count
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\insertspace}[1]{%
\expandafter\insertspaceloop\romannumeral\number\number#1 000\relax
}%
\newcommand{\insertspaceloop}[1]{%
\ifx\relax#1\ignorespaces\else~\expandafter\insertspaceloop\fi
}%
\newcommand{\drawbox}[3]{% 1->color ---- 2 -> width of box ----- 3-> text
\begin{tikzpicture}
\node[draw, fill={#1},rectangle,text width={#2}, text = white] {\color{white}\fontsize{6pt}{6pt}\selectfont #3};
\end{tikzpicture}%
}%
\begin{document}
\drawbox{black!100}{5.2cm}{\insertspace{7}Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{7} Hi im box}
\end{document}
答案2
低级 TeX 计数器的语法是\foo <optional equal> <number> <space or \relax>
并且没有括号(它不是参数)。但您不应该将其放入\newcount
定义中,而应该将其放在定义之外。否则,每次调用宏时,您都会分配一个寄存器。
答案3
你需要一个循环?
技巧:当前字体中的正常单词间距可用为\fontdimen2\font
。
使用下面的代码,\insertspaces{2.5}
如果您愿意,您还可以说,甚至\insertspaces{-3}
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\insertspace}[1]{\hspace*{#1\fontdimen2\font}\ignorespaces}
\newcommand{\drawbox}[3]{% 1->color ---- 2 -> width of box ----- 3-> text
\begin{tikzpicture}
\node[draw, fill={#1},rectangle,text width={#2}, text = white]
{\color{white}\fontsize{6pt}{6pt}\selectfont #3};
\end{tikzpicture}%
}
\begin{document}
\drawbox{black!100}{5.2cm}{\insertspace{0} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{1} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{2} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{3} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{4} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{5} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{6} Hi im box}
\drawbox{black!100}{5.2cm}{\insertspace{7} Hi im box}
\end{document}