我想要定义一个名为的命令\ksp{}
,如下所示:
\newcommand*{\ksp}{K_{sp}}
但是,如果未在数学模式下调用此函数,则会出错。请参阅此处的示例。
\documentclass{article}
\newcommand*{\ksp}{K_{sp}}
\begin{document}
Determine the \ksp{} of xyz. This will give an error
\end{document}
因此,我将命令修改为内联数学模式。
\newcommand*{\ksp}{$K_{sp}$}
但是,如果我在以下情况下调用该函数,则此新版本的命令会出现错误:已经在数学模式下。请参阅此处的示例。
\documentclass{article}
\newcommand*{\ksp}{$K_{sp}$}
\begin{document}
\begin{equation}
Determine the \ksp{} of xyz. will get an error.
\end{equation}
\end{document}
因此,我制作了一个更新的版本,它会尝试在调用命令时确定我们是否已经处于数学模式。我从以下代码中窃取了这里
% Ksp
\newif\ifstartedinmathmode
\newcommand*{\ksp}{
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi
{\ifstartedinmathmode K_{sp}\else\hspace{0pt}$K_{sp}$\fi}
}
此命令(上文)在两种情况下均有效。但是,它会在钾磷您可以在下面的文档中看到这一点。
\documentclass{article}
% Ksp
\newif\ifstartedinmathmode
\newcommand*{\ksp}{
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi
{\ifstartedinmathmode K_{sp}\else$K_{sp}$\fi}
}
\begin{document}
\begin{enumerate}
\item Determine the $K_{sp}$ of blahblah. \% this is the normal way of writing the term.
\item Determine the \ksp{} of blahblah. \% this is with the conditional command and it has extra whitespace surrounding the term.
\end{enumerate}
\end{document}
问题:
- 有什么方法可以解决间距问题吗?
- 我应该采取完全不同的方法吗?我只是想避免一遍又一遍地输入一些复杂的格式(Ksp 是我实际尝试进行的格式的简化,但它足以说明这一点)。
答案1
答案很简单。我在你的数学公式两边都加上了负数 \hskip。
\documentclass{article}
% Ksp
\newif\ifstartedinmathmode
\newcommand*{\ksp}{
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi
{\ifstartedinmathmode K_{sp}\else\hskip-1mm$K_{sp}$\hskip-1mm\fi}
}
\begin{document}
\begin{enumerate}
\item Determine the $K_{sp}$ of blahblah. \% this is the normal way of writing the term.
\item Determine the \ksp{} of blahblah. \% this is with the conditional command and it has extra whitespace surrounding the term.
\end{enumerate}
\end{document}
然而,正如@David Carlisle 的评论所示,更好的答案是:
\documentclass{article}
% Ksp
\newcommand*{\ksp}{\ensuremath$K_{sp}$}
\begin{document}
\begin{enumerate}
\item Determine the $K_{sp}$ of blahblah. \% this is the normal way of writing the term.
\item Determine the \ksp{} of blahblah. \% this is with the conditional command and it has extra whitespace surrounding the term.
\end{enumerate}
\end{document}