有时我需要缩进几行并显示数学文本。
例如在逻辑上做一些语义的证明。
下面是我目前如何缩进的一个例子
Suppose $\mathfrak{J} \vDash \text{KB}$
\setlength\parindent{24pt}
Then
\setlength\parindent{48pt}
$\mathfrak{J} \vDash \text{P(a,X)} \to \neg \text{P(b,X)}$
$\mathfrak{J} \vDash \text{P(a,n)}$
Therefore
\setlength\parindent{72pt}
$\mathfrak{J} \vDash \neg \text{P(b,n)} $
\setlength\parindent{24pt}
Also,
\setlength\parindent{48pt}
$\mathfrak{J} \vDash \neg \text{ P(X, n)} \to \neg \text{E(X)}$
非常糟糕,因为每次我需要更改缩进时都必须使用\setlength\parindent{24pt}
。这是我需要的结果:
Suppose J ⊨ KB
Then
J ⊨ P(a,X) → ¬ P(b,X)
J ⊨ P(a,n)
Therefore
J ⊨ ¬ P(b,n)
Also,
J ⊨ ¬ P(X,n) → ¬ E(X)
我希望可以只使用制表符来实现这种缩进,就像在纯文本中一样。这可能吗?
答案1
\documentclass{article}
\usepackage{amsmath,amssymb,listings}
\lstset{columns=fullflexible,keepspaces,mathescape}
\begin{document}
\begin{lstlisting}
Suppose $\mathfrak{J} \vDash \text{KB}$
Then
$\mathfrak{J} \vDash \text{P(a,X)} \to \neg \text{P(b,X)}$
$\mathfrak{J} \vDash \text{P(a,n)}$
Therefore
$\mathfrak{J} \vDash \neg \text{P(b,n)} $
Also,
$\mathfrak{J} \vDash \neg \text{ P(X, n)} \to \neg \text{E(X)}$
\end{lstlisting}
\end{document}
答案2
tabbing
这是 LaTeX 常常被忽视的环境有意义的罕见情况之一。
以下是您的代码的一个示例:
\begin{tabbing}
\hspace{24pt}\=\hspace{24pt}\=\hspace{24pt}\kill % ❶
Suppose $\mathfrak{J} \vDash \text{KB}$\\
\> Then \\ % ❷
\> \> $\mathfrak{J} \vDash \text{P(a,X)} \to \neg \text{P(b,X)}$\\
\> \> $\mathfrak{J} \vDash \text{P(a,n)}$\\
\> \> Therefore\\
\> \> \> $\mathfrak{J} \vDash \neg \text{P(b,n)} $ \\
\> Also, \\
\> \> $\mathfrak{J} \vDash \neg \text{ P(X, n)} \to \neg \text{E(X)}$
\end{tabbing}
我们首先设置“制表位”❶。每个\=
命令²设置一个制表位,并\kill
在行末告诉 LaTeX 实际上不要设置指定的文本。
然后我们\>
依次使用制表符移动到每个制表位,\\
并开始新行❷。
在我删除的章节中,我曾建议tabbing
采取以下三种方法,现在这些方法都有更好的解决方案:排版算法、漂亮的打印代码³和多页表,但对于你的情况来说,这非常合适。⁴
tabbing
由于非常罕见,我从我的 LaTeX 书中删除了这一章节。- 环境
tabbing
窃取了一些重音符命令供自己使用。因此,您需要使用\a=
和\a'
来\a`
获取长音符、尖音符和重音符。 - 尽管我不得不说我不喜欢这个
listings
包的默认样式的美感。 - 另一个需要更多工作的选项是使用
algorithmicx
包创建自定义算法类型,但我怀疑这样做会得不偿失(而且肯定比我愿意为 tex.se 答案做的工作要多)。我注意到它algorithmicx
通过巧妙隐藏的嵌套环境来管理其缩进list
。