这是一个非常基本的问题,我希望在这里问还是可以的。
我想做以下事情
\documentclass{article}
\usepackage{tikz}
\begin{tikzpicture}
\def \x {2}
\def \y {\x + 2}
\foreach \s in {\x,...,\y}
{
% Do things
}
\end{tikzpicture}
这给了我错误
! Illegal unit of measure (pt inserted).
<to be read again>
+
1.12 }
这为什么是不可能的呢?
答案1
TeX 不会按照您的意愿解析数学。在这里,\foreach
可能足够灵活,可以理解它,但总的来说,这是一个坏主意。
您可以通过 PGF 数学强制执行,例如
\pgfmathsetmacro\x{2}
\pgfmathsetmacro\y{int(\x + 2)} %without int \y would be 4.0 instead of 4
\foreach \s in {\x,...,\y}
{
% Do things
}
答案2
这是一个扩展问题。使用时\def\y{...}
\y
会采用使用时的值{....}
,而不是定义时的值。
假设你正在处理整数值,你想要的可能是
\edef\y{\number\numexpr\x+2\relax}
答案3
使用另一个宏tikz
(,此处)的值给宏(,此处)赋值的方法是使用\y
\x
\pgfmathsetmacro
(\y
的值是一个定点数),或者\pgfmathtruncatemacro
(对于整数值)。
这是一个例子。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\x{2}
\pgfmathsetmacro\xii{\x+0.25*\x}
\pgfmathsetmacro\y{\x+4.5}
\foreach \s in {\x,\xii,...,\y}{\s,\ }
\end{document}
答案4
建议使用 的解决方案fp
。
\documentclass[tikz,border=12pt,12pt]{standalone}
\usepackage[nomessages]{fp}
\FPset\x{2}
\FPeval\y{x+2}
\begin{document}
\begin{tikzpicture}
\foreach \s in {\x,...,\y}
{
% Do things
\draw (\s,\s) node {\s};
}
\end{tikzpicture}
\end{document}