У меня есть CSV-файл со списком химических соединений, которые я хотел бы проанализировать через из , \ce{}
который mhchem
преобразует их в красивую химическую нотацию. При использовании необработанной строки в качестве аргумента для \ce{}
works, когда та же строка задана как команда, макрос ничего не делает.
\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}