我有这个想法,创建一段代码,让我可以在笔记中为学生方便地介绍参数,我指的是这种分数表示法:
我需要一个命令来通过测量前提和结论来调整水平线,并在句子之外的每一侧添加 0.5em(或其他值)。使用ifthen
包我想出了这个非常不完美(说得客气一点)的三参数\inference
命令:
\newlength{\premiseone}
\newlength{\premisetwo}
\newlength{\conclusion}
\newcommand{\argument}[3]{%
\settowidth{\premiseone}{#1}
\settowidth{\premisetwo}{#2}
\settowidth{\conclusion}{#3}
\addtolength{\premiseone}{1em}
\addtolength{\premisetwo}{1em}
\addtolength{\conclusion}{1em}
\ifthenelse{\lengthtest{\premiseone > \premisetwo}}%
{\ifthenelse{\lengthtest{\premiseone > \conclusion}}%
{\dfrac{\parbox{\premiseone}{\center #1\\#2}}{\mbox{#3}}}%
{\dfrac{\parbox{\conclusion}{\center #1\\#2}}{\mbox{#3}}}%
}
它是专门为只有两个前提的论证而设计的,因此具有一些不太受欢迎的特性。例如,如果我写下,例如,\argument{the only premise}{}{the consequence}
LaTeX 会抱怨没有行结束,如果我添加一些空框,我会在论证上方或内部出现这个不必要的额外空间:
以下是我要问您的问题:
- 我该如何解决额外空格的问题?也就是说,我该如何通过书写来跳过一些参数,
\argument{the only premise}{}{the consequence}
而无需获得额外的垂直空间(无论是上方还是内部)? - 有没有相对简单的方法来构建一个命令,它不是为特定数量的前提而设计的,而是以与我类似的方式工作,适用于任何有限数量的前提?当然,我总是可以建造,,,
\argumentone
但这是在房子周围进行的。\arguemtttwo
\argumentthree
答案1
我会选择一个简单的tabular
:
\documentclass{article}
\newcommand*{\inference}[3][t]{%
\begingroup
\def\and{\\}%
\begin{tabular}[#1]{@{\enspace}c@{\enspace}}
#2 \\
\hline
#3
\end{tabular}%
\endgroup
}
\begin{document}
First example:
\inference{John is taller than Jane}{John is taller than Judy}
\bigskip
Second example:
\inference{John is taller than Jane \and Jane is taller than Judy}{John is taller than Judy}
\bigskip
Third example (vertically centred):
\inference[c]{John is taller than Jane \and Jane is taller than Judy \and Whatever else}{John is taller than Judy}
\end{document}
我添加了一个垂直放置的可选参数。当然,可以添加表格上方/下方的更多额外空间(这取决于在实际文档中如何使用它)。