我的 LaTeX 文档包含以下几行:
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\defineSpecies}[2]{\csdef{spec@#1}{#2}}
\newrobustcmd{\spec}[1]{%
\ifcsname spec@#1\endcsname
\csuse{spec@#1}
\else
\GenericError{}{Undefined species `#1'}{}{}
\fi
}
\defineSpecies{h216o}{H$_2^{~16}$O}
\begin{document}
\spec{h216o}. \spec{h216o} molecule
\end{document}
在编译此文档时,PDF文件中的点前会多出一个空格(用红色框表示):
你能帮我重新定义一下\spec{}
吗:(a)它不提供点前的红色空间,但(b)它包括世界前的蓝色空间分子。
请专注于修复此命令,而不是建议软件包,例如mchem
。
答案1
%
在行末添加。
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\defineSpecies}[2]{\csdef{spec@#1}{#2}}
\newrobustcmd{\spec}[1]{%
\ifcsname spec@#1\endcsname
\csuse{spec@#1}% <<<<
\else
\GenericError{}{Undefined species `#1'}{}{}% <<<<
\fi
}
\defineSpecies{h216o}{H$_2^{~16}$O}
\begin{document}
\spec{h216o}. \spec{h216o} molecule
\end{document}
答案2
除了缺少%
掩码结束线之外,您还可以利用该chemformula
包:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{chemformula}
\newcommand{\defineSpecies}[2]{\csdef{spec@#1}{\ch{#2}}}
\newrobustcmd{\spec}[1]{%
\ifcsname spec@#1\endcsname
\csuse{spec@#1}%
\else
\GenericError{}{Undefined species `#1'}{}{}%
\fi
}
\defineSpecies{h216o}{H2\,{^{16}}O}
\defineSpecies{caco3}{CaCO3}
\begin{document}
\spec{h216o}. \spec{caco3} molecule
\end{document}
一个可能的改进是使用“集中式”物种定义。
\documentclass{article}
\usepackage{chemformula}
\ExplSyntaxOn
\prop_new:N \g_tobir_species_prop
\cs_generate_variant:Nn \chemformula_ch:nn { ne }
\NewDocumentCommand{\defineSpecies}{m}
{
\prop_gset_from_keyval:Nn \g_tobir_species_prop { #1 }
}
\NewDocumentCommand{\spec}{m}
{
\prop_if_in:NnTF \g_tobir_species_prop { #1 }
{
\chemformula_ch:ne {} { \prop_item:Nn \g_tobir_species_prop { #1 } }
}
{
\GenericError{}{Undefined~species~`#1'}{}{}
}
}
\ExplSyntaxOff
\defineSpecies{
h216o = H2\,{^{16}}O,
caco3 = CaCO3,
}
\begin{document}
\spec{h216o}. \spec{caco3} molecule
\end{document}
答案3
你可能有很多理由使用etoolbox
,但要写化学方程式,你不需要它。强烈推荐对于身体关于兄弟姐妹的问题/答案/评论化学.se,你可以简单地使用化学工程(进入 CTAN)产生,例如
使用更易于阅读的 MWE,例如
\documentclass{article}
% \usepackage{etoolbox} % neither requirement for, no inhibitor of a compilation
\usepackage[version=4]{mhchem}
\begin{document}
Our water is labelled as $\ce{H2{}^{16}O}$. $\ce{CaCO3}$ then is added.
\end{document}
明确调用版本 1、2 或 3 可能会产生字距略有不同的输出;但对于您问题中提出的问题,这无关紧要。使用{}
pastH2
可防止2
被误解为氧的质量数而不是氢的原子倍增器;手册明确提到用户对 usepackage 的这种帮助。
除了项目本身的文档外,chemistry.se 还在专门的常问问题, 也。