使用 mhchem 和数组

使用 mhchem 和数组

我想使用数组包来格式化一个填满化学式的列,以避免\ce{X}在每一行上书写。我不知道这是否可行。我从隐藏列的技巧开始,但没有取得很大进展。我的代码是:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
        \newcolumntype{F}{>{\hbox\bgroup\ce{}}l<{\egroup}@{}}
        \newcolumntype{H}{>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}
        \newcolumntype{N}{>{\raggedright\arraybackslash}p{3cm}}
        \newcolumntype{M}{>{\centering\arraybackslash}p{2cm}}
\usepackage{booktabs}
\usepackage[version=3]{mhchem}

\begin{document}

\begin{array}{N F M}
\toprule
Name & Formula & MW\\ 
&& (Da) \\
\midrule
glycol & C2H6O2 & 62.07\\ 
glycerol & C3H8O3 & 92.09\\ 
 & & \\
\bottomrule
\end{array}  

\end{document}

我正在寻找一个 \newcolumntype{F}{????} 可以将列内容格式化为化学公式的命令

答案1

您的 MWE 生成一个关于array不在数学模式但您想要tabular这里的错误。

由于不在\ce最后一列,您可以使用分隔参数选取单元格内容。

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
        \newcolumntype{F}{>{\zzz}l<{\relax}@{}}
        \newcolumntype{H}{>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}
        \newcolumntype{N}{>{\raggedright\arraybackslash}p{3cm}}
        \newcolumntype{M}{>{\centering\arraybackslash}p{2cm}}
\def\zzz#1\relax{\ce{#1}}
\usepackage{booktabs}
\usepackage[version=3]{mhchem}

\begin{document}


\begin{tabular}{N F M}
\toprule
Name & Formula & MW\\ 
&& (Da) \\
\midrule
glycol & C2H6O2 & 62.07\\ 
glycerol & C3H8O3 & 92.09\\ 
 & & \\
\bottomrule
\end{tabular}


\end{document}

答案2

您可以使用该collcell包:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

% tabular material:
\usepackage{array,booktabs,collcell}
\newcolumntype{F}{>{\collectcell\ce}l<{\endcollectcell}}

% sciences:
\usepackage[version=4]{mhchem}% version 4 is the current one
\usepackage{siunitx}% provides column type `S' for aligned numbers

\begin{document}

\begin{tabular}{lFS[table-format=2.2]}
  \toprule
    Name & Formula & {MW} \\
    & & {(Da)} \\
  \midrule
    glycol   & C2H6O2 & 62.07 \\ 
    glycerol & C3H8O3 & 92.09 \\ 
  \bottomrule
\end{tabular}

\end{document}

在此处输入图片描述

上面的例子也使用siunitx包及其列类型S来对齐数字。

相关内容