chemfig 内で acro と mhchem を使用する

chemfig 内で acro と mhchem を使用する

ジョセフ・ライトのブログ投稿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 に注意してください。

mhchem によって解析されないコンテンツ

acro両方を入手してmhchem内部で動作させる方法についての提案がchemfigあれば、ぜひお願いします。

答え1

再定義により、\acsコマンドは複数回処理されますが、最初の処理 (これは推測ですが) はコンテンツを測定するためだけに行われるため、acro からの書き込みコマンドは実行されず、必要なものが\acro@used@onceaux ファイルに書き込まれるのではなく、\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}

関連情報