使用自定义命令对函数进行逻辑(一致)标记是一种好的做法吗?

使用自定义命令对函数进行逻辑(一致)标记是一种好的做法吗?

我最近才了解到在 LaTeX 中排版文档时标记保持一致的重要性(将内容与格式分开 - 即“只需输入”)。 例如,

  • \emph是一种语义标记,并不完全是以下内容的替代品\textit\emph 或 \textit
  • 使用\vec向量是一种很好的做法,并不是因为向量应该用箭头排版,而是因为我们可以自由地\vec在以后重新定义它以按照我们的意愿出现:如何将所有 \vec{} 更改为 \bf{}
  • 有多种类型的\dots命令可用于不同的语义环境:\dots* 的区别

同样,我现在想知道定义一个自定义命令(例如\func)用于函数标记是否好。例如,是否最好始终编写类似\(\func{f}(x), \func{g}(x_1, \dotsc, x_n)\)而不是仅仅编写\(f(x), g(x_1, \dotsc, x_n)\)

我在发帖前搜索过这个网站,但没有找到任何关于这方面的专门讨论。这个有趣的问题是相关的,但它问的是如何这可以做到,而不是如果应该这样做:我如何通过自己的宏来影响数学函数的间距?

答案1

我花了数年时间思考如何让 TeX 数学语法更具语义,特别是在变量和函数表达式方面。最终,我的努力成果变成了这个软件包语义。它采用面向对象的数学方法,其中每个变量都属于一个类,并且使用 keyval 语法设置类。您可以查看以下语法:

\documentclass{article}

\usepackage{amsmath,semantex}

\NewVariableClass\MyVar % creates a new class of variables, called "\MyVar"

% Now we create a couple of variables of the class \MyVar:
\NewObject\MyVar\vf{f}
\NewObject\MyVar\vg{g}
\NewObject\MyVar\vh{h}
\NewObject\MyVar\vn{n}
\NewObject\MyVar\vp{p}
\NewObject\MyVar\vU{U}
\NewObject\MyVar\vx{x}
\NewObject\MyVar\sheafF{\mathcal{F}}

% Now we set up the class \MyVar:
\SetupClass\MyVar{
    output=\MyVar,  % This means that the output of an object
                    % of class \MyVar is also of class \MyVar
    % We add a few keys for use with the class \MyVar:
    define keys={ % we define a few keys
        {inv}{upper={-1}},
        {conj}{command=\overline}, % Applies \overline to the symbol
        {inverse image}{upper={-1},no par},
    },
    define keys[1]={ % we define keys taking 1 value
        {der}{upper={(#1)}},
        {stalk}{sep lower={#1}},
        % "sep lower" means "separator + lower", i.e. lower index
        % separated from any previous lower index by a separator,
        % which by default is a comma
        {res}{ right return, symbol put right={|}, lower={#1} },
    },
}

\begin{document}

$ \vf[conj,der=\vn] $

$ \vg[inv,res=\vU]{\vx} $

$ \vh[inverse image]{\sheafF}[spar,stalk=\vp]
    = \sheafF[stalk=\vh{\vp}] $

\end{document}

在此处输入图片描述

相关内容