使用前缀表示法

使用前缀表示法

我想在我的文档中显示前缀符号,有点像这样:

+ (x 5 3) (- 6 4)

但是,我想在数学模式下输入它,但是数学模式会删除所有空格,所以我得到了

+(x53)(-64)

这有完全不同的含义。显然我可以明确地添加空格,但是

$+\;(\times\;5\;3)\;(-\;6\;4) $

在源代码中并不完全可读。

还有更好的方法吗?

答案1

你想要写的东西与s-表达式。我以为可能已经有一些包可以帮助你编写这些,但在谷歌搜索后找不到任何东西。无论如何,以下 TeX 宏似乎可以完成这项工作

\documentclass{article}
\makeatletter
\def\sx@stop{\relax}\def\sx@open{(}\def\sx@close{)}
\def\sx@scan#1{%
  \def\sx@arg{#1}%        save the current token
  \ifx\sx@arg\sx@stop   % is it the end of the list?
    \let\sx@next\relax
  \else
    \ifx\sx@arg\sx@close\else\sx@space\fi % add space unless token is ")"
    {\sx@arg}%                            % write the token
    \ifx\sx@arg\sx@open                   
      \let\sx@space\relax                 % kill next space if token is "("
    \else
      \let\sx@space\;
    \fi
    \let\sx@next\sx@scan                  % scan next token
  \fi\sx@next
}
\newcommand{\sexp}[1]{\let\sx@space\relax\sx@scan#1\relax}
\makeatother

\begin{document}
$\sexp{+ (\times 5 3) (- 6 4 {7 8})}$
\end{document}

请注意,您还可以对元素进行分组,例如{7 8}暂时关闭命令的效果(即在输出中显示为“78”)。如果表达式中的某些符号是需要参数或其他内容的复杂宏,您可能也需要这样做,只需将整个内容括在一个{group}.

在此处输入图片描述

答案2

我只需定义一个宏\newcommand{\prefix}[3]{#1\;#2\;#3},然后像这样使用它:

$\prefix{+}{(\prefix{\times}{5}{3})}{(\prefix{-}{6}{4})}$

是否足够可读是个人喜好。

相关内容