通过 ifthen 包表示参数

通过 ifthen 包表示参数

我有这个想法,创建一段代码,让我可以在笔记中为学生方便地介绍参数,我指的是这种分数表示法:

在此处输入图片描述

我需要一个命令来通过测量前提和结论来调整水平线,并在句子之外的每一侧添加 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 会抱怨没有行结束,如果我添加一些空框,我会在论证上方或内部出现这个不必要的额外空间:

![在此处输入图片描述

以下是我要问您的问题:

  1. 我该如何解决额外空格的问题?也就是说,我该如何通过书写来跳过一些参数,\argument{the only premise}{}{the consequence}而无需获得额外的垂直空间(无论是上方还是内部)?
  2. 有没有相对简单的方法来构建一个命令,它不是为特定数量的前提而设计的,而是以与我类似的方式工作,适用于任何有限数量的前提?当然,我总是可以建造,,,\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}

在此处输入图片描述

我添加了一个垂直放置的可选参数。当然,可以添加表格上方/下方的更多额外空间(这取决于在实际文档中如何使用它)。

相关内容