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