tikz 外部库和 chemfig 的问题 - 外部图像中的致命错误

tikz 外部库和 chemfig 的问题 - 外部图像中的致命错误

我有一个文档,其中包含许多使用 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}

运行makemakefile 编译失败。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)”的对齐仍有改进空间。

可能的解决方案:

  1. 如何编译没有改变方程的代码?
  2. 在代入方程式时如何才能正确对齐tikzpicture 解决了
  3. 奖励:如果有人能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 手册中所述。

相关内容