我想在我的文档中显示前缀符号,有点像这样:
+ (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})}$
是否足够可读是个人喜好。