Usando acro e mhchem dentro do chemfig

Usando acro e mhchem dentro do chemfig

Depoisuma postagem no blog de Joseph Wright, eu queria usar mhchemem chemfig. Tudo correu bem, até que decidi incluir siglas no acropacote. Com o seguinte MWE, a sigla é definida como usada, mas não incluída na lista de siglas.

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

Sigla não na lista de siglas

Quando o código da postagem do blog é removido, tudo funciona bem novamente, mas gostei muito de poder usar \cede dentro do \chemfig. Além disso, ele \chemfigusou a fonte de texto sem serifa em vez da fonte matemática com serifa, que era algo que eu queria.

Tentei usar cinco \expandafters em torno da \printatommacro. Isso corrigiu o problema do acrônimo, e a fonte ainda é a mesma da fonte de texto sem serifa ao redor, mas a análise por \cenão é mais feita corretamente. Observe o não subscrito 2:

Conteúdo não analisado por mhchem

Qualquer sugestão de como obter ambos acroe mhchemtrabalhar internamente chemfigseria muito apreciada.

Responder1

Devido à sua redefinição, o \acscomando é processado mais de uma vez, mas como o primeiro processamento - este é um palpite - é feito apenas para medir o conteúdo, os comandos de gravação do acro não são executados e, portanto, não grava o necessário \acro@used@oncepara o arquivo auxiliar, mas apenas \acro@used@twiceda composição tipográfica real.

Você também obteria um comportamento semelhante se usasse acro dentro align(testado) e provavelmente tabularxem outro ambiente que processasse seu conteúdo duas vezes. Então, é um bug: o acro deve verificar este caso.

Você deve notificar o autor. Como solução alternativa, você pode tentar o seguinte. Esteja ciente de que do ponto de vista do acro esta chave foi usada duas vezes. Portanto, um estilo especial para ocorrências “únicas” não 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}

informação relacionada