
Despuésuna publicación de blog de Joseph Wright, quería usar mhchem
en chemfig
. Todo salió bien, hasta que decidí incluir siglas en el acro
paquete. 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}
Cuando se elimina el código de la publicación del blog, todo vuelve a funcionar bien, pero realmente me gustó poder usarlo \ce
desde dentro \chemfig
. Además, utilizó \chemfig
la fuente de texto sans-serif en lugar de la fuente matemática serif, que era algo que quería.
Intenté usar cinco \expandafter
mensajes alrededor de la \printatom
macro. 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 \ce
ya no se realiza correctamente. Tenga en cuenta el no subíndice 2:
Cualquier sugerencia sobre cómo conseguir ambos acro
y mhchem
cómo trabajar dentro chemfig
será muy apreciada.
Respuesta1
Debido a su redefinición, el \acs
comando 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@once
para el archivo auxiliar, pero solo \acro@used@twice
desde la composición tipográfica real.
Obtendría un comportamiento similar también si usara acro dentro align
(probado) y probablemente tabularx
en 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}