化合物のリストを含む CSV ファイルがあり、 から を介して解析して、\ce{}
適切mhchem
な化学表記に変換したいと考えています。 の引数として生の文字列を使用すると機能しますが\ce{}
、同じ文字列がコマンドとして指定されると、マクロは何も実行しません。
\documentclass{scrartcl}
\begin{filecontents*}{foo.csv}
Molecule
CH4
\end{filecontents*}
\usepackage{datatool}
\usepackage{mhchem}
\DTLloaddb{foo}{foo.csv}
\DTLgetvalue{\methane}{foo}{1}{1}
\begin{document}
CH4
\methane
\ce{CH4}
\ce{\methane}
\end{document}
利回り
つまり、 何もしないということです(下付き文字として\ce{\methane}
付ける必要があります)。4
答え1
\ce
は引数を展開する必要があるようです(おそらくは\ce
それを解析するため)ので、次のようにする必要があります。\expandafter
引数が正しい形式であることを確認するには:
\expandafter\ce\expandafter{\methane}
説明
内部では\ce
、アクティブ文字 ( ^
、、_
など{
) は異なる意味を持ちます。直感的な意味ですが、技術的には標準の LaTeX とは大きく異なります。したがって、は\ce
展開されていない入力を解析する必要があります。
この特定のケースでは、\ce
が見つかり\methane
、化学的な書式設定が行われました。これは化学的なものではないため、そのままコピーされ、後で に拡張されますCH4
。
\expandafter\ce\expandafter{\methane}
確認する前に、それ\methane
が拡張されていることを確認します。CH4
\ce
ヒント
そのために独自のコマンドを作成することができます。
\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}
そうすれば、簡単に書くことができます
\myce{\methane}