在创建测验时,我需要格式化逻辑论证,我们的教科书将其呈现为前提列表,每行一个,然后是与最宽前提一样宽的水平线,结论在下面。规则周围不应该有太多空间(它不占用自己的一行。)
我使用pbox
包(我有 1.2 版)处理了这个问题。我将前提和结论放在一个 pbox 中,\hrule
结论前面有一个。由于是\pbox
最宽线的宽度,所以\hrule
也是正确的宽度。这是一个最小的例子。
\documentclass{minimal}
\usepackage{pbox}
\begin{document}
\pbox{8cm}{
Either you love logic or you hate it. \\
You don't hate logic.
\smallskip\hrule\smallskip
You love logic.}
\end{document}
实际上,这很好用,只是会产生错误:You can't use `\hrule' here except with leaders.
按下 Enter 忽略错误后,输出结果与我期望的完全一样,只是每次编译文档时都必须按 9 次 Enter,这不太好。测验如下所示:
这引出了一个四重问题:
- 错误的原因是什么?它似乎只出现在
\pbox
? 我很想听听 TeXnical 基础的解释。 - 如何在 上画一条水平线
\pbox
而不出错?我发现\hrulefill
可以,但需要一条自己的线。有没有比 更优雅的方法\\[-.7em] \null\hrulefill\\[-.2em]
,它的缺点是间距繁琐(容易崩溃,并且只能近似于 的间距\smallskip\hrule\smallskip
,我喜欢这一点)? - 有没有办法使用
\leaders
,如错误所建议的那样,来保持产生的相同输出,\hrule
但没有错误? - 实现我想要的结果的正确方法是什么?我想最明显的方法是使用
tabular
环境,但这对我来说在语义上似乎不正确。一连串的语句,下面有一行,不是表格!此外,线条与宽度的匹配程度不如\pbox
,不过我相信可以通过摆弄来解决这个问题。
答案1
仅解决第 4 项,隐藏tabular
宏内部\logicarg{<premise>}{<conclusion>}
可能更有吸引力:
\documentclass{article}
\newcommand{\logicarg}[2]{% \logicarg{<premise>}{<conclusion>}
\begin{tabular}[t]{@{}l@{}}
#1 \\ \hline #2
\end{tabular}%
}
\begin{document}
\begin{enumerate}
\item \logicarg
{If you are eating soup then I am happy. \\ You are eating soup}
{I am happy}
\item \logicarg
{If it is Wednesday then you aren't taking a quiz. \\ It is not Wednesday.}
{You are taking a quiz.}
\item \logicarg
{Either you love logic or you hate it. \\ You don't hate logic.}
{You love logic.}
\end{enumerate}
\end{document}
答案2
\documentclass{minimal}
\usepackage{pbox}
\begin{document}
\pbox{8cm}{
Either you love logic or you hate it. \\
You don't hate logic.
\smallskip
\endgraf
\ifvmode\nointerlineskip\fi
\leavevmode\leaders\hrule height 1pt \hfill\mbox{}\endgraf
\smallskip
You love logic.}
\end{document}
您不能\vrule
在垂直模式下使用,也不能\hrule
在水平模式下使用,但它对 pbox 来说有点微妙,因为它首先在 hmode 中测量事物,然后设置一个段落。\pbox
主要是表格环境,直接使用它可能会更简单。