我想使用数组包来格式化一个填满化学式的列,以避免\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
来对齐数字。