我想排版 Spencer-Brown 的一些公式形式法则使用嵌套交叉格式,最好使用数学模式,有时内联到段落中。例如以下内容:
所以我需要的是使用三角形/线条作为分隔符来嵌套块的可能性。
如果我不借助于绘制和嵌入 SVG 图形,我该怎么做呢?
答案1
这是使用一些低级 TeX 编程可以完成的事情。
\documentclass{article}
\usepackage{amsmath}
\newcommand\CROSS[1]{%
\hbox{%
\vbox{
\hrule
\kern1.5pt
\hbox{$#1$\,\strut}
}%
\vrule
}\mskip\thickmuskip
}
\begin{document}
\begin{align*}
f &= \CROSS{\CROSS{\CROSS{\CROSS{\dots a}b}a}b} \\
&= \CROSS{\CROSS{fa}b}
\end{align*}
\end{document}
答案2
该解决方案使用了该stackengine
包的各种功能。
\documentclass{article}
\usepackage{stackengine}
\newlength\Lobj
\newsavebox{\newobj}
\newcommand\LoF[2]{%
\def\obj{$#1$~$#2$\,}%
\setlength\Lobj{\widthof{\obj}}%
\sbox\newobj{\stackon[3pt]{\obj}{\rule{\Lobj}{.3pt}}}%
\usebox{\newobj}%
\rule{.3pt}{\ht\newobj}%
}
\begin{document}
\def\stackalignment{l}
\(\stackunder[2ex]{$f$ = \LoF{\LoF{\LoF{\LoF{}{a}}{b}}{a}}{b}}
{\phantom{$f$} = \LoF{\LoF{}{fa}}{b}}
\)
\end{document}
答案3
这是我的最终版本,允许插入垂直空格。我不知道如何自动检测水平空格,所以我有两个宏。“梯队”(第 55 页):
\documentclass{article}
\usepackage{amsmath}
\newcommand\LoF[2][0]{%
\hbox{%
\vbox{
\hrule
\kern \dimexpr 2pt + #1\dimexpr 2.7pt\relax\relax
\hbox{$#2$\,\footnotesize\strut}
}%
{\vrule depth 1pt}}\mskip7mu
}
\newcommand\LoFN[2][0]{%
\hbox{%
\vbox{
\hrule
\kern \dimexpr 2pt + #1\dimexpr 2.7pt\relax\relax
\hbox{$#2$\,\footnotesize\strut}
}%
{\vrule depth 1pt}}\mskip1mu
}
\begin{document}
\begin{align*}
&\LoF{\LoF{a}b} \\[0.5ex] % ((a)b)
&= \LoF{\LoF{a}b}\LoF{\LoF{a}b} \\[0.5ex] % ((a)b)((a)b)
&= \LoF{\LoF{a}\LoFN{\LoFN{b}}}\LoF[1]{\LoF{a}b} \\[0.5ex] % (((a)b)a)(((a)b)(b))
&= \LoF{\LoF{\LoF{\LoF{a}b}a}\LoFN{\LoF{\LoF{a}b}\LoFN{b}}} \\[0.5ex] % ((((a)b)a)(((a)b)(b)))
&= \LoF{\LoF{\LoF{\LoF{a}b}a}\LoFN{\LoFN{b}}} \\[0.5ex] % ((((a)b)a)((b)))
&= \LoF{\LoF{\LoF{\LoF{a}b}a}b} % ((((a)b)a)((b)))
\end{align*}
\end{document}