Verwenden von acro und mhchem innerhalb von chemfig

Verwenden von acro und mhchem innerhalb von chemfig

Nachein Blogbeitrag von Joseph Wrightmhchem, wollte ich in verwenden chemfig. Alles lief gut, bis ich beschloss, Akronyme in das Paket aufzunehmen acro. Mit dem folgenden MWE ist das Akronym als verwendet definiert, aber nicht in der Akronymliste enthalten.

\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}

Akronym nicht in der Akronymliste

Wenn der Code aus dem Blogbeitrag entfernt wird, funktioniert alles wieder einwandfrei, aber ich fand es wirklich gut, es \cevon innen verwenden zu können \chemfig. Außerdem wurde dadurch \chemfigdie serifenlose Textschriftart anstelle der mathematischen Serifenschriftart verwendet, was ich wollte.

Ich habe versucht, fünf \expandafters um das \printatomMakro zu setzen. Dadurch wurde das Akronymproblem behoben und die Schriftart ist immer noch dieselbe wie die umgebende serifenlose Textschriftart, aber die Analyse \cefunktioniert nicht mehr richtig. Beachten Sie die nicht tiefgestellte 2:

Inhalte, die von mhchem nicht analysiert wurden

Ich bin für alle Vorschläge dankbar, wie man beides bekommt acround mhchemdarin funktioniert .chemfig

Antwort1

Durch deine Neudefinition \acswird der Befehl zwar mehrmals ausgeführt, da die erste Ausführung -- das ist eine fundierte Vermutung -- aber nur zur Messung des Inhalts erfolgt, werden die Schreibbefehle von Acro nicht ausgeführt und es wird daher nicht das Nötige \acro@used@oncein die Aux-Datei geschrieben, sondern nur \acro@used@twiceder eigentliche Satz.

Ein ähnliches Verhalten würde auch auftreten, wenn Sie Acro innerhalb align(getestet) und wahrscheinlich tabularxin einer anderen Umgebung verwenden würden, die ihren Inhalt zweimal verarbeitet. Es handelt sich meiner Meinung nach also um einen Fehler: Acro sollte diesen Fall überprüfen.

Sie sollten den Autor benachrichtigen. Als Workaround können Sie Folgendes versuchen. Beachten Sie, dass dieser Schlüssel aus Sicht von Acro zweimal verwendet wurde. Ein spezieller Stil für „einzelne“ Vorkommen wird also nicht funktionieren.

\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}

verwandte Informationen