我有一个文档,其中包含许多使用 PGFPlots 创建的图表,我想将这些图表外部化。所有其他 tikz 片段都不应外部化。我通过设置\tikzset{external/only named=true}
并为图表起一个好听的名字来实现这一点。
这似乎适用于除chemfig
包创建的图形之外的任何东西。考虑以下 MWE:
% file: chemfigbug.tex
% arara: pdflatex: { action: nonstopmode}
% arara: make: { task: -B -f chemfigbug.makefile }
% arara: pdflatex: { action: nonstopmode}
%
\documentclass{article}
\usepackage{chemfig}
%
\usetikzlibrary{external}
\tikzexternalize[shell escape=-enable-write18]
\tikzsetexternalprefix{extern/}
\tikzset{external/only named=true}
\tikzset{external/mode=list and make}
%
\begin{document}
%
\tikzsetnextfilename{house}
\begin{tikzpicture}
\draw[thick] (0,0) -- (0,2) -- (1,3.25) -- (2,2) -- (2,0) -- (0,2) -- (2,2) -- (0,0) -- (2,0);
\end{tikzpicture}
\begin{equation}
%
%\begin{tikzpicture}
\definesubmol\nobond{-[,0.2,,,draw=none]}
\chemfig[][scale=0.4]{[:30]*6(=-=-=(-*6(-(!\nobond\bullet)=-=-=))-)}
\chemsign{+}\chemfig{C_2H_2}\chemrel{->}
\chemfig[][scale=0.4]{[:30]*6(=-=-=(-*6(-(-=_[0,]-[:-60])=-=-=))-)}
\chemsign{+}\chemfig{H}
%\end{tikzpicture}
\end{equation}
\end{document}
运行make
makefile 编译失败。house.log
显示以下错误:
Runaway argument?
! File ended while scanning use of \tikzexternal@laTeX@collect@until@end@tikzpicture.
<inserted text>
\par
<*> ...rnalrealjob{chemfigbug}\input{chemfigbug}
我发现一个可能的解决方案是将chemfig
-code 放入环境中tikzpicture
。取消注释这些命令可以实现完美编译,但是方程的对齐会完全混乱。不将“房子”外部化似乎可以解决所有问题,但我确实需要在实际用例中将一些外部化。
更新
进一步研究代码后,我不仅引入了tikzpicture
-环境,还将chemfig
代码放入了 中,成功实现了水平对齐\node
。在垂直方面,我一直在尝试[baseline]
选项tikz
,并取得了不错的结果。在我看来,仍然需要进行一些微调。
我想到的是:
\documentclass{article}
\usepackage{chemfig}
\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=-1.15ex]
\node at (0,0) {%
\definesubmol\nobond{-[,0.2,,,draw=none]}
\chemfig[][scale=0.4]{[:-30]*6(=-=(-*6(-=-=-=))-(!\nobond\bullet)=-)}
\chemsign{+}\chemfig{C_2H_2}\chemrel{->}
\chemfig[][scale=0.4]{[:-30]*6(=-=*6(-*6(-=-=-=)--=--)-=-)}
\chemsign{+}\chemfig{H}
};
\end{tikzpicture}
\end{equation}
\end{document}
它是什么样子的:
与“(1)”的对齐仍有改进空间。
可能的解决方案:
- 如何编译没有改变方程的代码?
在代入方程式时如何才能正确对齐解决了tikzpicture
?- (
奖励:如果有人能)解决了chemfig
为我创建 3 环的解决方法提供更漂亮的解决方案,我将不胜感激 :)
答案1
至于对齐问题,这里有一个“棘手”的解决方案:
\definesubmol\nobond{-[,0.2,,,draw=none]}
\begin{equation}
\mbox{Preceding text:}
\schemestart[][185]
\chemfig[][scale=0.4]{[:-30]*6(=-(!\nobond\vphantom{\bullet})=(-*6(-=-=-=))-(!\nobond\bullet)=-)}
\arrow{0}[,0]\+ \chemfig{C_2H_2}
\arrow
\chemfig[][scale=0.4]{[:-30]*6(=-(-[,,,,draw=none])=*6(-*6(-=-=-=)--=--)-=-)}
\arrow{0}[,0]\+ \chemfig{H}
\schemestop
\end{equation}
让我解释一下细节。第一个分子垂直错位的问题在于子弹在顶部。因此,我们在另一侧添加一个“幻影子弹” (!\nobond\vphantom{\bullet})
。我们对另一个分子也使用同样的技巧,并添加一个“幻影”键(-[,,,,draw=none])
。然后我们让两个分子对称。为了用“+”号垂直对齐,我们使用“幻影”箭头\arrow{0}[,0]
。(我们使用了很多幻影:))
最后,为了使其与方程编号对齐,我们必须使用 \schemestart[][] 的第二个参数“摆弄”整个方案的位置(对我来说 185 似乎可以)。
我不确定为什么需要将它包装在 tikzpicture 中,但是使用 tikzpicture 的基线选项和 (0,0) 处的 \node 的方式非常好。
如果您不确定对齐方式,请使用 \schemedebug{true} 或 \printatom,正如 chemfig 手册中所述。