这是 pgf 中的一个错误吗?pgfpatharcto

这是 pgf 中的一个错误吗?pgfpatharcto

我做了一个最简单、最简短的例子。我创建了一条包含圆弧的简单路径。但如果我在开始文档之前计算该路径,则会得到垃圾数据,而在开始文档之后,它会按预期工作。我不确定这是功能还是错误。

\documentclass{standalone}
\usepackage{tikz}
\makeatletter
%% create a simple path containing an arc
\newcommand{\mypath}[1]{\pgfpathmoveto{\pgfpoint{1cm}{1cm}}%
\pgfpatharcto{1cm}{1cm}{0}{1}{0}{\pgfpoint{2cm}{1cm}}\pgfsyssoftpath@getcurrentpath{#1}\pgfusepath{}}
%% compute and assign the path to \bugpath
\mypath\bugpath
\begin{document}
%% compute and assign the path to \path
x\mypath\path y% <- why so much space between x and y ?
%% stroke \path
\pgfsyssoftpath@setcurrentpath{\path}\pgfsyssoftpath@flushcurrentpath\pgfusepath{draw}%
%% stroke \bugpath in red
\pgfsetstrokecolor{red}%
\pgfsyssoftpath@setcurrentpath{\bugpath}\pgfsyssoftpath@flushcurrentpath\pgfusepath{draw}%
%% stroke a blue rectangle to contain the previous strokes
\tikz{\path[draw=blue] (0,0) rectangle (5cm,5cm);}
\end{document}

我想了解为什么红色路径和黑色路径不一样。

辅助问题:为什么 x 和 y 之间有这么大的空间?

示例结果

答案1

我不完全清楚那里发生了什么,但据我所知,字体之前还没有完全设置好\begin{document}

\normalfont\mypath\bugpath

“修复”了观察到的行为(事实上\normalsize也是如此)。

在盒子里这样做可能会更安全:

\sbox0{\normalsize\mypath\bugpath\global\let\bugpath\bugpath}

虽然,作为马克·维布罗评论,无论如何,你应该把所有的 PGF 命令放在一个pgfpicture环境中,这样你就可以做到

\sbox0{\pgfpicture\mypath\bugpath\global\let\bugpath\bugpath\endpgfpicture}

在序言中或文件中。

如果您想要保存路径以供日后重复使用,您也可以再次使用\mypath...

相关内容