Usando acro y mhchem dentro de chemfig

Usando acro y mhchem dentro de chemfig

Despuésuna publicación de blog de Joseph Wright, quería usar mhchemen chemfig. Todo salió bien, hasta que decidí incluir siglas en el acropaquete. Con el siguiente MWE, el acrónimo se define como utilizado, pero no se incluye en la lista de acrónimos.

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

Acrónimo no en la lista de acrónimos

Cuando se elimina el código de la publicación del blog, todo vuelve a funcionar bien, pero realmente me gustó poder usarlo \cedesde dentro \chemfig. Además, utilizó \chemfigla fuente de texto sans-serif en lugar de la fuente matemática serif, que era algo que quería.

Intenté usar cinco \expandaftermensajes alrededor de la \printatommacro. Esto solucionó el problema del acrónimo y la fuente sigue siendo la misma que la fuente del texto sans-serif circundante, pero el análisis \ceya no se realiza correctamente. Tenga en cuenta el no subíndice 2:

Contenido no analizado por mhchem

Cualquier sugerencia sobre cómo conseguir ambos acroy mhchemcómo trabajar dentro chemfigserá muy apreciada.

Respuesta1

Debido a su redefinición, el \acscomando se procesa más de una vez, pero como el primer procesamiento (esto es una suposición fundamentada) solo se realiza para medir el contenido, los comandos de escritura desde acro no se ejecutan y, por lo tanto, no escribe el necesario \acro@used@oncepara el archivo auxiliar, pero solo \acro@used@twicedesde la composición tipográfica real.

Obtendría un comportamiento similar también si usara acro dentro align(probado) y probablemente tabularxen otro entorno que procese su contenido dos veces. Entonces, en mi humilde opinión, es un error: acro debería verificar este caso.

Debe notificar al autor; como solución alternativa, puede intentar lo siguiente. Tenga en cuenta que desde el punto de vista del acro, esta clave se ha utilizado dos veces. Por lo tanto, un estilo especial para ocurrencias "únicas" no funcionará.

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

información relacionada