为什么边界框尺寸是从 beamer 中的先前 chemfig 分子继承而来的?

为什么边界框尺寸是从 beamer 中的先前 chemfig 分子继承而来的?

我确信我的问题与我的操作系统有关,但我不知道原因和方式。

去年我使用的是 Debian wheezy,现在我用的是 Mint Rebecca。

我正在修改课程的幻灯片,在 Mint(emacs/auctex 到 pdf)上编译旧幻灯片后,我发现与去年的幻灯片有一些差异。

我已经在系统上取消了 wheezy,所以目前无法检查差异。

考虑以下(尽可能清理的)代码

\documentclass[final, 10pt]{beamer} 
\usepackage{chemfig} 
\newcommand*\circleatom[1]{\tikz\node[circle,draw,fill=green!30]{\printatom{#1}};}

\definesubmol{&}{-[:100,.8,,,draw=none]}
\setlewisdist{4pt}
\definesubmol{Glycine}{
  H_{2}
  -[:-90]\lewis{0:,N}
  -[:225]H_{2}C 
  -[:-45]C(=[:-90]O)
  -[:30]\lewis{7:3:1:,O}!&\circleatom{Me}}

\definesubmol{EDTA}{
          HOOC-CH{_2}-[::-45,,1]
          {\lewis{4:,N}}
          (-[::-90,,1,1]CH{_2}-[::-45]HOOC)
          -CH{_2}-CH{_2}-
          \lewis{0:,N}
          (-[::45]CH{_2}-COOH)
          -[::-45]CH{_2}-COOH
        }


\begin{document}

\begin{frame}
  \chemname{\chemfig{!{Glycine}}}{Glycine}
\end{frame}

\begin{frame}
 \chemname{\chemfig{!{EDTA}}}{EDTA}
\end{frame}

\end{document}

嗯,这是这个,但在 Mint 和 Beamer 文档上,结果不同。

“高”甘氨酸边界框的高度似乎是由“短”EDTA 继承的,其“EDTA”名称距离分子本身很远。

事实上,如果你注释该行,\chemname{\chemfig{!{Glycine}}}{Glycine}EDTA 标题就会切换回更靠近分子的正确位置。

我无法添加我已保存的去年编译的 pdf,但我向你保证,一年前 wheezy 上并不存在这种行为。

我确信我在这里遗漏了一些明显的东西,但我看不出是什么!

答案1

\chemname根据化合物的深度设置化合物下方的名称以及以前的用法\chemnamechemfig手册上说:

事实上,绘制<name>命令\chemname插入 1.5ex + 迄今为止最大的分子深度低于每个分子的基线 [...]。该命令\chenameinit{<stuff>} 使用 初始化这个最大深度<stuff>

从技术上讲,这意味着\CF@dp@max最初为 0.0pt 的部分已更新全球每次使用时,\chemname如果当前深度<stuff>大于当前的值\CF@dp@max

手册里也告诉了解决办法:

因此,我们应该:

  • \chemnameinit{<deepest molecule>}在反应中使用命令之前写上\chemname,除非反应从最深的分子开始;
  • 写完化学反应的所有名称后再写\chemnameinit{},以免该反应的最大深度干扰未来的反应。

这种行为的原因是为了能够与不同深度的分子发生反应,其中名称是对齐的。这是全局进行的,以便能够在使用chemfig's创建的方案中对齐名称\schemestart ... \schemestart,其中化合物放在框中(感谢@unbonpetit解释背景)。

\chemnameinit{}在您第一次使用 之后使用\chemname也是解决方案。或者,您也可以\chemname*{...}{...}对第二个分子使用带星号的版本。带星号的版本不会考虑之前的调用,但也不会重置\CF@dp@max

\documentclass{article}
\usepackage{chemfig} 
\newcommand*\circleatom[1]{\tikz\node[circle,draw,fill=green!30]{\printatom{#1}};}

\definesubmol{&}{-[:100,.8,,,draw=none]}
\setlewisdist{4pt}
\definesubmol{Glycine}{
  H_{2}
  -[:-90]\lewis{0:,N}
  -[:225]H_{2}C 
  -[:-45]C(=[:-90]O)
  -[:30]\lewis{7:3:1:,O}!&\circleatom{Me}}

\definesubmol{EDTA}{
          HOOC-CH{_2}-[::-45,,1]
          {\lewis{4:,N}}
          (-[::-90,,1,1]CH{_2}-[::-45]HOOC)
          -CH{_2}-CH{_2}-
          \lewis{0:,N}
          (-[::45]CH{_2}-COOH)
          -[::-45]CH{_2}-COOH
        }


\begin{document}

% first solution:    
\begingroup
  \chemname{\chemfig{!{Glycine}}}{Glycine}
  \chemnameinit{} % (un-) comment to see the difference
\endgroup

\chemname{\chemfig{!{EDTA}}}{EDTA}

% second solution:
\begingroup
  \chemname{\chemfig{!{Glycine}}}{Glycine}
\endgroup

\chemname*{\chemfig{!{EDTA}}}{EDTA}

\end{document}

相关内容