如何保存 tikzpicture 末尾的最后一个框?

如何保存 tikzpicture 末尾的最后一个框?

也许问题不清楚。我知道如何将 tikzpicture 放在框内。我在这个中做到了问题像这样

\newsavebox{\mycandle}
\savebox{\mycandle}{% 
  \begin{tikzpicture}[scale=.1]
   ...
  \end{tikzpicture}
  } 

但在这种情况下,我将一个盒子(\pgfpic也许是最后一个盒子)放入一个盒子中,我想知道在\endtikzpicture到达时是否有可能保存最后一个盒子。

我不确定,但我认为好的盒子是\pgfpic。在文件中 pgfcorescopes.code.tex,在宏的末尾\endpgfpicture,我发现了\pgfsys@endpicture ,然后\pgfsys@typesetpicturebox\pgfpic。第一个似乎取决于驱动程序,我不理解代码,对于第二个宏,\pgfsys@typesetpicturebox定义在文件 pgfsys.code.tex 内

以下是该宏的代码:

\def\pgfsys@typesetpicturebox#1{%
  \pgf@ya=\pgf@shift@baseline\relax%
  \advance\pgf@ya by-\pgf@picminy\relax%
  %
  %
  \advance\pgf@picmaxy by-\pgf@picminy\relax% maxy is now the height
  \advance\pgf@picmaxx by-\pgf@picminx\relax% maxx is now the width
  \setbox#1=\hbox{\hskip-\pgf@picminx\lower\pgf@picminy\box#1}%
  \ht#1=\pgf@picmaxy%
  \wd#1=\pgf@picmaxx%
  \dp#1=0pt%
  \leavevmode%
  \pgf@xa=\pgf@trimleft@final\relax  \ifdim\pgf@xa=0pt \else\kern\pgf@xa\fi
  \raise-\pgf@ya\box#1%
  \pgf@xa=\pgf@trimright@final\relax \ifdim\pgf@xa=0pt \else\kern\pgf@xa\fi
}          

但我不明白有关这个宏的评论:

% Called after a picture has been typeset in box #1. This
% command should insert the box into the normal TeX code. The box #1
% will still be a ``raw'' box that contains only the \special's. The
% job of this command is to resize and shift this box according to the
% baseline shift and the size of the box.
%
% This command has a default implementation.

好吧,我迷失在所有这些代码中,我不确定我想要的是否可行。也许这是一个坏主意。

答案1

如果我说

\newsavebox{\mycandle}
\savebox{\mycandle}{% 
  \begin{tikzpicture}[scale=.1]
  \draw (0,0) -- (1,1) ;
  \end{tikzpicture}}

然后来自的对数\showbox\mycandle(具有较高的\showboxbreadth和的值\showboxdepth)是

> \box36=
\hbox(3.24544+0.0)x3.24544
.\pdfcolorstack 0 push {0 g 0 G}
.\hbox(3.24544+0.0)x3.24544
..\glue 0.2
..\hbox(0.0+0.0)x0.0, shifted -0.2
...\pdfliteral{q }
...\pdfliteral{0 G }
...\pdfliteral{0 g }
...\pdfliteral{0.3985 w }
...\hbox(0.0+0.0)x0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\glue 0.0
....\pdfliteral{q }
....\glue 0.0
....\glue 0.0
....\pdfliteral{0.0 0.0 m }
....\pdfliteral{2.83484 2.83484 l }
....\pdfliteral{S }
....\pdfliteral{Q }
....\glue 0.0 plus 1.0fil minus 1.0fil
...\pdfliteral{n }
...\pdfliteral{Q }
...\glue 0.0 plus 1.0fil minus 1.0fil
.\pdfcolorstack 0 pop

所以你不是\pdfcolorstack最后一个框,它被合适的指令包围(在 中pdflatex)。它们变成\special{color push gray 0}\special{color pop}latexxelatex。我认为在发出这些成对的命令之前尝试获取内部框并不安全。

相关内容