删除 LaTeX 命令产生的多余空格

删除 LaTeX 命令产生的多余空格

我的 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}

AAA

答案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 还在专门的常问问题, 也。

相关内容