
Depoisuma postagem no blog de Joseph Wright, eu queria usar mhchem
em chemfig
. Tudo correu bem, até que decidi incluir siglas no acro
pacote. 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}
Quando o código da postagem do blog é removido, tudo funciona bem novamente, mas gostei muito de poder usar \ce
de dentro do \chemfig
. Além disso, ele \chemfig
usou a fonte de texto sem serifa em vez da fonte matemática com serifa, que era algo que eu queria.
Tentei usar cinco \expandafter
s em torno da \printatom
macro. 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 \ce
não é mais feita corretamente. Observe o não subscrito 2:
Qualquer sugestão de como obter ambos acro
e mhchem
trabalhar internamente chemfig
seria muito apreciada.
Responder1
Devido à sua redefinição, o \acs
comando é 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@once
para o arquivo auxiliar, mas apenas \acro@used@twice
da composição tipográfica real.
Você também obteria um comportamento semelhante se usasse acro dentro align
(testado) e provavelmente tabularx
em 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}