有人可以使我的格式化变量名称的命令更好地工作吗?

有人可以使我的格式化变量名称的命令更好地工作吗?

因此,我得到了这个命令,用于在家庭作业中格式化变量名称:

\newcommand*{\var}[1]{\ensuremath{\mathord{\mathtt{#1}}}}

问题是它不能顺利处理下标。我最终经常输入这样的代码:

\var{Something}_{\var{SomethingElese}}

这有点麻烦。我可以用以下方法让它工作吗:

\var{Something_SomethingElse}

或者至少:

\var{Something}_\var{SomethingElse}

答案1

必须将下标括在括号/组中以指示其范围。因此,使用

\newcommand*{\var}[1]{$\mathtt{#1}$}

足够了:

在此处输入图片描述

\documentclass{article}
\newcommand*{\var}[1]{$\mathtt{#1}$}
\begin{document}
\var{Something_{SomethingElse}}
\end{document}

答案2

仅使用定义

\newcommand*\var[1]{\mathtt{#1}}

可以让你轻松地应用下标,而不用括号,就像这样$\var{XYZ}_\var{ABC}$。将整个内容放在 中\mathord可以使内容不受字体系列变化的影响,但如果你没有很好的理由想要这样做,我怀疑它是否比你要求的易用性更重要。

我还建议您删除\ensuremath;首先,它会破坏无括号下标。总的来说,我觉得隐藏公式的“数学性”是不可取的,即使它可以节省一点书写时间,因为您可以(有时!而不是在使用下标时)避免书写$...$。请参阅这个问题进行讨论。

答案3

下标的诀窍是定义成\var这样,使其扩展为子公式。这是通过一对额外的花括号实现的。我删除了\mathord,因为它是不需要的。\mathtt还将其参数放入子公式中,而子公式已经是“mathord”。

\documentclass{article}

\newcommand*{\var}[1]{{\ensuremath{\mathtt{#1}}}}

\begin{document}
Variable \var{foo} and as subscript for \var{bar}: $\var{bar}_\var{foo}$

Another example: $X_\var{foo}^\var{bar}$
\end{document}

结果

这是有效的,因为下标和上标不寻找参数,而是寻找数学原子,在本例中是子公式。

相关内容