答案1
这将基于观点,因此我首先会建议您输入文档的策略。
\usepackage{amsmath}
\newcommand{\func}[1]{\operatorname{\mathit{#1}}} % or \mathrm
\newcommand{\const}[1]{\mathit{#1}} % or \mathrm
\newcommand{\wsub}[1]{\mathrm{#1}} % 'word' subscript
然后你可以输入
$\func{letter}(\sigma,c)\equiv\func{startmarker}(c)$
$\func{only}_{\wsub{free}}(\{c_{0}\})$
当然,你可以为最常用的功能添加简写
\newcommand{\letter}{\func{letter}}
\newcommand{\startmarker}{\func{startmarker}}
\newcommand{\only}[1][]{%
\func{only}%
\if\relax\detokenize{#1}\relax _{\wsub{#1}}\fi
}
上述公式将是
$\letter(\sigma,c)\equiv\startmarker(c)$
$\only[free](\{c_{0}\})$
如果使用\only
带有可选文本下标的的定义会更简单:xparse
\usepackage{xparse}
\NewDocumentCommand{\only}{o}{%
\func{only}%
\IfValueT{#1}{_{\wsub{#1}}}%
}
或者你可以选择更简单的\newcommand{\only}{\func{only}}
类型
$\only_{\wsub{free}}(\{c_{0}\})$
现在说说我的看法。startmarker 之类的函数不是 max、log 或 sin 之类的“标准”函数。这些函数名称应始终以直立方式排版,以强调其“固定”含义。您在文档中定义的函数并非通用,因此您可以选择直立或斜体。只要保持一致,这就是我提出的定义的目的。
如果您后来决定诸如 startmarker 之类的函数应该直立排版,只需\mathit
从 的定义中删除\func
(或将其替换为\mathrm
,但由于我们已经在下面,所以\operatorname
不需要这样做)。
对于常数,这是一个类似的问题。我从来没有把常数排版成直立的(这是我留给物理学家的事情),但我明白其他人可能有不同的想法。
你肯定不会把两个多字母常量放在一起,除非有一个明确的乘号:所以
\const{foo}\cdot\const{bar}
并不是\const{foo}\const{bar}
。