在 chemfig 中使用 acro 和 mhchem

在 chemfig 中使用 acro 和 mhchem

Joseph Wright 的博客文章mhchem,我想在 中使用chemfig。一切顺利,直到我决定在acro包中包含首字母缩略词。使用以下 MWE,首字母缩略词被定义为已使用,但不包含在首字母缩略词列表中。

\documentclass{article}
\usepackage{acro}
\usepackage{chemfig}
\usepackage[version=4]{mhchem}

\DeclareAcronym{boc}{short=Boc,long=\textit{tert}-butyloxycarbonyl}

% From http://www.texdev.net/2012/08/25/exploring-chemfig-customising-appearance/
\makeatletter
\def\CF@node@content{%
  \expandafter\expandafter\expandafter%\expandafter\expandafter%
  \printatom\expandafter\expandafter\expandafter%\expandafter\expandafter%
  {\csname atom@\number\CF@cnt@atomnumber\endcsname}%
  \ensuremath{\CF@node@strut}%
}
\makeatother
\renewcommand*{\printatom}[1]{{\ce{#1}}}

\begin{document}

\sffamily

\acifused{boc}{Boc is used}{Boc is not used}

\chemfig{\acs{boc}HN-R-NH2}

\acifused{boc}{Boc is used}{Boc is not used}

\printacronyms

\end{document}

缩写词不在缩写词列表中

当删除博客文章中的代码后,一切都恢复正常,但我真的很喜欢能够\ce从内部使用\chemfig。此外,它\chemfig使用了 sans-serif 文本字体而不是 serif 数学字体,这是我想要的。

我尝试在宏\expandafter周围使用五个 s \printatom。这确实解决了首字母缩略词问题,字体仍然与周围的无衬线文本字体相同,但解析\ce不再正确。请注意非下标 2:

mhchem 未解析的内容

对于如何实现这两者acromhchem在其中发挥作用的任何建议chemfig,都将不胜感激。

答案1

由于您的重新定义,该\acs命令会被处理多次,但是作为第一次处理——这是一个有根据的猜测——仅用于测量内容,来自 acro 的写入命令不会被执行,因此它不会将所需的内容写入\acro@used@onceaux 文件,而只会\acro@used@twice从实际排版中写入。

align如果您在内部(已测试)使用 acro,并且可能tabularx在其他环境中对其内容进行两次处理,您也会得到类似的行为。所以在我看来这是一个错误:acro 应该检查这种情况。

您应该通知作者,作为解决方法,您可以尝试以下方法。请注意,从 acro 的角度来看,此键已被使用两次。因此,针对“单次”出现的特殊样式将不起作用。

\documentclass{article}
\usepackage{acro}
\usepackage{chemfig,amsmath}
\usepackage[version=4]{mhchem}

\DeclareAcronym{boc}{short=Boc,long=\textit{tert}-butyloxycarbonyl}

%% From http://www.texdev.net/2012/08/25/exploring-chemfig-customising-appearance/
\makeatletter
\def\CF@node@content{%
  \expandafter\expandafter\expandafter%\expandafter\expandafter%
  \printatom\expandafter\expandafter\expandafter%\expandafter\expandafter%
  {\csname atom@\number\CF@cnt@atomnumber\endcsname}%
  \ensuremath{\CF@node@strut}%
}


\ExplSyntaxOn
\cs_set_protected:Npn \acro@used@twice #1#2#3#4
  {
    \bool_if:cF {g__acro_#1_in_list_bool}
    {\acro@used@once {#1}{#2}{#3}{#4}}
    \cs_gset_nopar:cpn {acro@#1@twice} {#1}
    \tl_if_empty:nF {#2#3#4}
      { \seq_gput_right:cn {g__acro_#1_pages_seq} { {#2}{#3}{#4} } }
  }

\ExplSyntaxOff

\makeatother
\renewcommand*{\printatom}[1]{{\ce{#1}}}

\begin{document}


\sffamily

\acifused{boc}{Boc is used}{Boc is not used}

\chemfig{\acs{boc}HN-R-NH2}

\acifused{boc}{Boc is used}{Boc is not used}

\printacronyms

\end{document}

相关内容