我尝试使用 pgf/tikz 处理外部图像,如手册第 107 节所述。我没有使用“外部”tikz 库,因为我遇到了所需的 shell 转义功能问题,而且我喜欢使用 makefile 重新生成图像的简单性。
基本上一切都正常。唯一的问题是,图像在外部化时不在图形环境中居中。相反,它们是左对齐的。
这是一个最小的例子(保存为“tikz_debug.tex”):
\documentclass{article}
\usepackage{tikz}
\pgfrealjobname{tikz_debug}
\begin{document}
One line of text so we see the figure positioning relative to the text.
\begin{figure}
\centering
\beginpgfgraphicnamed{test}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
\end{tikzpicture}
\endpgfgraphicnamed
\end{figure}
\end{document}
在没有“test.pdf”的情况下直接编译时,矩形会按预期居中。如果存在“test.pdf”(使用“pdflatex --jobname=test tikz_debug”创建),矩形则会左对齐。
如果我使用手册中显示的命令包含图像(107.4)
\long\def\beginpgfgraphicnamed#1#2\endpgfgraphicnamed{\includegraphics{#1}}
然后居中就可以了。如果我改用“\usepackage{tikzexternal}”,则不会。我认为我已经将问题缩小到 tikz 将“\includegraphics”放入“\hbox”中,但我对 TeX 不够熟悉,无法理解原因,我完全预料到我会做错事。
所以我的问题是:如何使用“\beginpgfgraphicnamed”和居中图形?
答案1
当然,\hbox
居中不会通过设置段落设置来实现,但是原始框不会开始一个段落,它只是垂直堆叠在前一个材料的下方(在垂直模式下)
你可以使用
\leavevmode\beginpgfgraphicnamed
哪里\leavevmode
是一个确实开始一个段落的宏(所有乳胶框命令,例如\parbox
或\mbox
或以这种方式\includegraphics
使用\leavevmode
,以便它们在诸如center
或之类的环境中自然地工作\flushright