虽然在数学宏中执行一般数学运算不太可行。我觉得应该可以做一个只针对个位数的宏,其他输入则使用默认设置
\dec{1}
至0
\dec{2}
至1
\dec{3}
至2
...
\dec{8}
至7
\dec{9}
至8
\dec{i}
至i-1
\dec{10}
至10-1
这该怎么做?用某种开关/盒子吗?
用例:
我正在描述一个神经网络的数学模型,每一层 h (i-1)都可以通过将 sigmoid 矩阵 w (i,i-1)乘以 h (i)得出 。我将 w (i,i-1) 命名为 w (i,i-1),因为我一直忘记它来自哪个数字层以及它要到哪个层。但我想定义一个宏,以便对于较小的数字(神经网络永远不会超过 9 层),我有一个宏,所以我可以说\w{5}
得到相当于的输出\mathbb{w}^{5,4)}
。但是我也希望能够一般地谈论层,所以说\w{i}
得到\mathbb{w}^{(i,i-1)}
答案1
这是一个“字符串测试”;您可以将其添加到列表中。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\sw}{ m }
{
\mathbf{w}^{(#1,\oxinabox_decr:n { #1 })}
}
\cs_new_protected:Npn \oxinabox_decr:n #1
{
\str_case:nnF { #1 }
{
{1}{0}
{2}{1}
{3}{2}
{4}{3}
{5}{4}
{6}{5}
{7}{6}
{8}{7}
{9}{9}
{10}{9}
{11}{10}
}
{#1 - 1}
}
\ExplSyntaxOff
\newcommand{\sh}[1]{\mathbf{h}^{#1}}
\begin{document}
$\sh{i-1}=\sigma(\sw{i}\sh{i})$, so, for the top layer,
$\mathbf{y}=\sh{0}=\sigma(\sw{1}\sh{0})$.
\end{document}
答案2
使用 Peter Grill 答案中的数字测试https://tex.stackexchange.com/a/50113/15925您可以执行以下操作:
\documentclass{article}
\usepackage{xstring,etoolbox}
\newcommand{\pdec}[1]{#1-1}
\newcommand{\dec}[1]{\IfStrEq{#1}{ }{}{%
\IfInteger{#1}{%
\ifnumless{#1}{10}{%
\ifnumgreater{#1}{0}{\number\numexpr#1-1\relax}{\pdec{#1}}}%
{\pdec{#1}}}
{\pdec{#1}}}}
\begin{document}
\( \dec{1} \) to \( 0 \)
\( \dec{2} \) to \( 1 \)
\( \dec{3} \) to \( 2 \)
\( \dec{8} \) to \( 7 \)
\( \dec{9} \) to \( 8 \)
\( \dec{i} \) to \( i-1 \)
\( \dec{10} \) to \( 10-1 \)
\( h^{(\dec{i})} = \sigma(\mathbf w^{(i,\dec{i})}\mathbf h^{(i)}) \).
\end{document}