
後ジョセフ・ライトのブログ投稿mhchem
を で使用したいと考えていましたchemfig
。パッケージごとに頭字語を含めることに決めたまでは、すべて順調でしたacro
。次の MWE では、頭字語は使用されていると定義されていますが、頭字語リストには含まれていません。
\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}
\ce
ブログ投稿のコードが削除されると、すべてが再び正常に動作しますが、内から使用できるのが本当に気に入りました。また、セリフ数式フォントの代わりにサンセリフテキストフォントが使用されるよう\chemfig
になりました。これは私が望んでいたことです。\chemfig
\expandafter
マクロの周囲に 5 つの sを使用してみました\printatom
。これにより頭字語の問題は修正され、フォントは周囲のサンセリフ テキスト フォントと同じままですが、解析は\ce
正しく行われなくなりました。下付き文字ではない 2 に注意してください。
acro
両方を入手してmhchem
内部で動作させる方法についての提案がchemfig
あれば、ぜひお願いします。
答え1
再定義により、\acs
コマンドは複数回処理されますが、最初の処理 (これは推測ですが) はコンテンツを測定するためだけに行われるため、acro からの書き込みコマンドは実行されず、必要なものが\acro@used@once
aux ファイルに書き込まれるのではなく、\acro@used@twice
実際のタイプセッティングからのみ書き込まれます。
align
内部で acro を使用した場合(テスト済み) や、おそらくコンテンツを 2 回処理するその他の環境でも、同様の動作が発生しますtabularx
。したがって、これはバグであると私は考えています。acro はこのケースをチェックする必要があります。
作者に通知する必要があります。回避策として、次の方法を試すことができます。acro の観点から、このキーは 2 回使用されていることに注意してください。したがって、「単一」の発生に対する特別なスタイルは機能しません。
\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}