减量宏,在边式中减 1

减量宏,在边式中减 1

虽然在数学宏中执行一般数学运算不太可行。我觉得应该可以做一个只针对个位数的宏,其他输入则使用默认设置

\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}

相关内容