我正在使用 Titikz
绘制一个正十五边形(即 15 边形)shapes.geometric
钾Z 库。我选择了这个(简化版):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\node [
draw, regular polygon,
regular polygon sides = 15
] at (0,0) {};
\end{tikzpicture}
\end{document}
一切都很好,直到我想到将“神奇数字” 15 包装到宏中。我这样做了:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\def\sides{15}
\node [
draw, regular polygon,
regular polygon sides = \sides
] at (0,0) {};
\end{tikzpicture}
\end{document}
繁荣!!!
! Missing number, treated as zero.
<to be read again>
\relax
l.12 ] at (0,0) {};
我也尝试过这个:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\newcommand*\sides{15}
\node [
draw, regular polygon,
regular polygon sides = \sides
] at (0,0) {};
\end{tikzpicture}
\end{document}
但它却以同样的方式蓬勃发展。因此:
为什么这不起作用?我不太明白 :(
那我该怎么办呢?
我考虑过放一个\tikzset{regular polygon sides = 15}
,但是因为我需要在其他地方使用这个神奇数字,所以除非我以后可以提取这个数字,否则我不能使用这种方法。
任何帮助都值得感激:)
答案1
这是谜题的解决方案:查看pgflibraryshapes.geometric.code.tex
并发现\sides
已在内部使用:
683 % Shape Regular Polygon.
684 %
685 \pgfdeclareshape{regular polygon}{%
686 \savedmacro\sides{%
687 \pgfmathtruncatemacro\sides{\pgfkeysvalueof{/pgf/regular polygon sides}}%
688 }%
(添加了行号以定位代码)。因此,重新定义\sides
很可能会对代码处理产生不利影响。在 PGF 手册的第 1112 页,我们看到
答案2
为什么不使用math
tikzlibrary
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,math}
\tikzmath{
let \n=15;}
\begin{document}
\begin{tikzpicture}
\node [
draw, regular polygon,
regular polygon sides = \n
] at (0,0) {};
\end{tikzpicture}
\end{document}
答案3
@egreg 很好地解释了错误的原因,这里提供了一个简单的使用方法\sides
。你只需要添加.expanded
密钥即可。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\newcommand*\sides{15}
\node [
draw, regular polygon,
regular polygon sides/.expanded=\sides
] at (0,0) {};
\end{tikzpicture}
\end{document}