我遇到了一个从未遇到过的问题,我使用 Texmaker(MiKTeX)在我的 PC 上编写的代码运行正常,但当复制粘贴到 Overleaf 中时会出现错误。
这是代码:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\chair#1#2#3#4{
\begin{scope}[shift={#1},rotate={#2-90},scale={0.5*#3}]
\draw (-1.1,1) to[out=30,in=150] (1.1,1);
\draw (-1,0.75) to[out=30,in=150] (1,0.75) -- (1,-0.75) to[out=-150,in=-30] (-1,-0.75) to cycle;
\draw (0,0) node {#4};
\end{scope}
}
\pagenumbering{gobble}
\centering
\begin{tikzpicture}[line width=0.5mm,scale=1.1]
\def\a{12}
\def\s{2}
\foreach \i in {0,...,\a-1}
\chair{({\i*180/(\a-1)}:{1.5+\s})}{\i*180/(\a-1)}{0.75}{}; % (this is line 20)
\end{tikzpicture}
\end{document}
在 Texmaker 中,它的渲染效果正如我所希望的那样:
但是,当将该精确代码复制粘贴到 Overleaf 中时,语句\foreach
无法正确迭代,如下所示。
(请注意,混乱的抗锯齿表明这 12 个数字堆叠在一起。)
我收到以下两个错误信息:
基于这个帖子我怀疑这与 Overleaf 使用的版本有关,但我不确定如何更改它。如果不可能,我该如何修改代码以在 Overleaf 使用的版本中正确呈现?
答案1
解决方法如下:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\def\chair#1#2#3#4{
\begin{scope}[shift={#1},rotate={#2-90},scale={0.5*#3}]
\draw (-1.1,1) to[out=30,in=150] (1.1,1);
\draw (-1,0.75) to[out=30,in=150] (1,0.75) -- (1,-0.75) to[out=-150,in=-30] (-1,-0.75) to cycle;
\draw (0,0) node {#4};
\end{scope}
}
\pagenumbering{gobble}
\centering
\begin{tikzpicture}[line width=0.5mm,scale=1.1]
\def\a{12}
\def\s{2}
\foreach \i in {0,...,{\numexpr\a-1}}
\chair{({\i*180/(\a-1)}:{1.5+\s})}{\i*180/(\a-1)}{0.75}{}; % (this is line 20)
\end{tikzpicture}
\end{document}
我刚刚添加了无法直接读取的\numexpr
命令。可能在较新版本的 中可以,但也建议(在我看来)将其作为已计算的参数提供在那里或至少在 内。\a-1
tikz
{}
输出:您的输出。
答案2
Ti 的一个优点钾Z 是它有pic
s 就是为了这个目的。错误的起源已经暗示了科莱格尔:是的,你确实不能拥有\a-1
。\foreach
(据我所知,然而,\numexpr
技巧可以追溯到符号 1,至少我从他的这个回答。)但这里没有必要这么做。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\pagenumbering{gobble}
\centering
\begin{tikzpicture}[line width=0.5mm,scale=1.1,
pics/chair/.style={code={%
\draw (-1.1,1) to[out=30,in=150] (1.1,1);
\draw (-1,0.75) to[out=30,in=150] (1,0.75) -- (1,-0.75) to[out=-150,in=-30] (-1,-0.75) to cycle;
\draw (0,0) node {#1};
}}]
\def\a{12}
\def\s{2}
\foreach \i in {1,...,\a}
{\path ({(\i-1)*180/(\a-1)}:{1.5+\s}) pic[scale=0.4,rotate={-90+(\i-1)*180/(\a-1)}]{chair};}
\end{tikzpicture}
\end{document}