Tikz 代码在 TeXmaker 中渲染得很好,但在 Overleaf 中却会出现单位问题

Tikz 代码在 TeXmaker 中渲染得很好,但在 Overleaf 中却会出现单位问题

我遇到了一个从未遇到过的问题,我使用 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-1tikz{}

输出:您的输出。

答案2

Ti 的一个优点Z 是它有pics 就是为了这个目的。错误的起源已经暗示了科莱格尔:是的,你确实不能拥有\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}

在此处输入图片描述

相关内容