因此,我得到了这个命令,用于在家庭作业中格式化变量名称:
\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}
这是有效的,因为下标和上标不寻找参数,而是寻找数学原子,在本例中是子公式。