
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}
Wenn der Code aus dem Blogbeitrag entfernt wird, funktioniert alles wieder einwandfrei, aber ich fand es wirklich gut, es \ce
von innen verwenden zu können \chemfig
. Außerdem wurde dadurch \chemfig
die serifenlose Textschriftart anstelle der mathematischen Serifenschriftart verwendet, was ich wollte.
Ich habe versucht, fünf \expandafter
s um das \printatom
Makro zu setzen. Dadurch wurde das Akronymproblem behoben und die Schriftart ist immer noch dieselbe wie die umgebende serifenlose Textschriftart, aber die Analyse \ce
funktioniert nicht mehr richtig. Beachten Sie die nicht tiefgestellte 2:
Ich bin für alle Vorschläge dankbar, wie man beides bekommt acro
und mhchem
darin funktioniert .chemfig
Antwort1
Durch deine Neudefinition \acs
wird 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@once
in die Aux-Datei geschrieben, sondern nur \acro@used@twice
der eigentliche Satz.
Ein ähnliches Verhalten würde auch auftreten, wenn Sie Acro innerhalb align
(getestet) und wahrscheinlich tabularx
in 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}