答案1
你可以快速完成,也可以做得很好。两者很难兼顾。你会注意到,即使是你发布的那个,据我所知,它是直接从门德尔松出版的书中摘录的,也是搞砸了。第 2 行中的 T 应该在双条件下,而不是在 A 下。
我能想到的最佳方法是使用数组(或表格)。困难的是让顶部的公式具有类似于其通常的数学间距。如果将每个语句和连接词分成自己的单元格,则通常的 LaTeX 数学间距规则将被忽略。因此,您基本上要做的是@{…}
在每列之间使用列说明符,并在二进制连接词之前和之后添加空格@{\ }
,并删除其他地方的所有列间空格@{}
。
最终的代码有点丑陋:
\documentclass{article}
\usepackage{array}
\usepackage{amssymb}
\usepackage{mathpazo}% optional: a font more like Mendelson's
\newcommand{\F}{\mathrm{F}}
\newcommand{\T}{\mathrm{T}}
\begin{document}
\newcounter{tableline}
\setcounter{tableline}{0}
\newcommand{\advline}{\refstepcounter{tableline}\thetableline}
\[
\begin{array}%
{@{}r@{}c@{\ }c@{\ } r@{}r@{} c@{}l@{\ }c@{\ }c@{}l@{\ }c@{\ } r@{}r@{} c@{}l@{\ }c@{\ } c@{}l@{\ }c@{}}
(( &A &\Leftrightarrow&(( &\lnot&B &) &\lor &C &)) &\Rightarrow&(( &\lnot&A &) &\Rightarrow&B &)) & \\
& & & & & & & & & &\F & & & & & & & & \advline\\
& &\T & & & & & & & & & & & & &\F & & & \advline\\
& & & & & & & & & & & &\T & & & &\F & & \advline\\
&\F & & & & & & & & & & & &\F & & & & & \advline\\
& & & & & & &\F & & & & & & & & & & & \advline\\
& & & &\F & & & &\F & & & & & & & & & & \advline\\
& & & & &\T & & & & & & & & & & & & & \advline\\
\end{array}
\]
\end{document}
我在列说明符中插入了空格,这样您就可以看到哪个列说明与哪个列相匹配。(我将左括号的列右对齐,将右括号的列左对齐,以符合它们的适用范围,但我认为这并不重要。)
输出如下所示:
您可能可以使用 lua 编写一个脚本,该脚本可以自动解析语句并输入正确的间距(同时,填写表格的其余部分,因为计算机非常擅长真值函数逻辑...)但这比我愿意为 StackExchange 答案做的工作要多。