我正在尝试用我的命令绘制简单的图形:
\documentclass{article}
\usepackage{tikz}
\usepackage{xstring}
\usepackage{float}
\begin{document}
\newcommand{\lT}[4]{ \draw[line cap=round, line width = 0.5] (#1, #2) -- (#3,#4){}; }
\newcommand{\drawGraph}[1]{
\StrLen{#1}[\mylen];
\foreach \x in {1,...,\mylen}
{
\pgfmathtruncatemacro{\second}{\x+1};
\foreach \y in {\second}
{
\StrChar{#1}{\x}[\numA];
\StrChar{#1}{\y}[\numB];
\pgfmathsetmacro{\rA}{\numA * 0.5};
\pgfmathsetmacro{\rB}{5 * 0.5}; % problem
\lT{\x-1}{\rA}{\x}{\rB};
}}}
\begin{figure}[H]%
\begin{tikzpicture}[font=\sffamily, scale=0.50, every node/.style= {scale=1.00}]
\drawGraph{1482449257683314302317851};
\end{tikzpicture}%
\end{figure}
\end{document}
像这样,它画了一些东西。问题是,如果我改变线:
\pgfmathsetmacro{\rB}{5 * 0.5};
更改为:
\pgfmathsetmacro{\rB}{\numB * 0.5};
它会抛出“!缺少数字,视为零。”错误。带有 \numA 的行正在运行...这可能是我使用不同代码的第十次尝试。我尝试过:\newcounter、\newcount、pgfmacrosss,但总是在某个时候出现相同的错误。那么我遗漏了什么?谢谢。
在我之前的尝试中我尝试了没有第二次 foreach:
\StrChar{#1}{\x}[\numA];
\pgfmathtruncatemacro{\y}{\x + 1};
\StrChar{#1}{\y}[\numB];
\pgfmathsetmacro{\rA}{\numA * 0.5};
\pgfmathsetmacro{\rB}{\numB * 0.5};
\lT{\x-1}{\rA}{\x}{\rB};
同样的错误…
答案1
\x
将字符串长度作为最后一个值:
\StrLen{#1}[\mylen];
\foreach \x in {1,...,\mylen}
{
然后\second
\pgfmathtruncatemacro{\second}{\x+1};
大于字符串长度,但是
\StrChar{#1}{\y}[\numB];
\y
现在是空的,因为#1
在字符串结束后没有提供任何数字,并且空\numB
在乘法中是无效的:
\pgfmathsetmacro{\rB}{\numB * 0.5}; % problem
只要提供一个额外的数字,错误就会消失:
\StrChar{#10}{\y}[\numB];
但我不知道其目的是什么,因此我无法说出正确的解决方法是什么。