定义一个自动生成一些表的环境

定义一个自动生成一些表的环境

有没有办法定义一个环境,自动生成表格的第一行和第一列,让您像往常一样填写其余的条目?

我来告诉你我的意思。

我偶尔仍会研究梵语,任何研究过融合语言的人都会熟悉范式的概念。每个名词可以出现在各种不同的格和数中,每种格和数都有特定的形式,以显示单词在句子中的作用。例如,烈火意思是“火”。如果我想说“在火中”,我会用阿格瑙如果我想说“来自火灾”,我会用火祭

名词的所有可能形式都可以用表格来表示。这是范例。因此:

在此处输入图片描述

\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{array}

\begin{document}

\begin{tabular}{>{\scshape}l|*{3}{>{\itshape}c}}

  & \normalfont{\textsc{sg}} & \normalfont{\textsc{du}} &
  \normalfont{\textsc{pl}} \\ \hline

  nom & agni\d{h} & agn\={\i} & agnaya\d{h} \\

  acc & agnim & agn\={\i} & agn\={\i}n \\

  ins & agnin\={a} & agnibhy\={a}m & agnibhi\d{h} \\

  dat & agnaye & agnibhy\={a}m & agnibhya\d{h} \\

  abl & agne\d{h} & agnibhy\={a}m & agnibhya\d{h} \\

  gen & agne\d{h} & agnyo\d{h} & agn\={\i}n\={a}m \\

  loc & agnau & agnyo\d{h} & agni\d{s}u \\

  voc & agne & agn\={\i} & agnaya\d{h} \\

\end{tabular}

\end{document}

现在每个名词都有一个范式(尽管顺便说一句,梵语的许多理论形式在实际使用中并未得到证实)。你可以想象,骨架(第一行和第一列)是不变的,但表格的内容每次都会发生变化。

我想要的是一个可以定义表格外部的环境,并让我输入内容,如下所示:

\begin{paradigm}
  k\={u}pa\d{h} & k\={u}pau & k\={u}p\={a}\d{h} \\

  k\={u}pam & k\={u}pau & k\={u}p\={a}n \\

  k\={u}pena & k\={u}p\={a}bhy\={a}m & k\={u}pai\d{h} \\

  k\={u}p\={a}ya & k\={u}p\={a}bhy\={a}m & k\={u}pebhya\d{h} \\

  k\={u}p\={a}t & k\={u}p\={a}bhy\={a}m & k\={u}pebhya\d{h} \\

  k\={u}pasya & k\={u}payo\d{h} & k\={u}p\={a}n\={a}m \\

  k\={u}pe & k\={u}payo\d{h} & k\={u}pe\d{s}u \\

  k\={u}pa & k\={u}pau & k\={u}p\={a}\d{h} \\
\end{paradigm}

这将产生:

在此处输入图片描述

我只是不知道如何在不定义 24 个参数的命令的情况下生成这个命令(这是否可能),因为这需要在每个参数周围加上括号,而且麻烦多多。但我提出这一点,希望这对巫师来说可能是一个有趣的挑战。

答案1

以下是 的基本实现paradigm,它基于 的重新定义,设置了tabular以及第一列。请注意,应避免在(或)之前\\使用终端:\\\end{tabular}\end{paradigm}

在此处输入图片描述

\documentclass{article}

\usepackage{array}

\newcounter{paradigmlinecnt}
\makeatletter
\newcommand{\paradigmnewline}{%
  \paradigmnewline@% Regular tabular newline
  \stepcounter{paradigmlinecnt}%
  \ifcase\value{paradigmlinecnt} %
  \or %nom % 1 (nom already set as part of \begin{paradigm}
  \or acc % 2
  \or ins % 3
  \or dat % 4
  \or abl % 5
  \or gen % 6
  \or loc % 7
  \or voc % 8
  \else ???
  \fi
  &
}

\newenvironment{paradigm}
  {\global\let\savenewline\\% Store meaning of \\ outside of tabular
   \setcounter{paradigmlinecnt}{1}%
   \begin{tabular}{ >{\scshape}l | *{3}{>{\itshape}c} }% Default paradigm tabular specification
    & \normalfont{\textsc{sg}} & \normalfont{\textsc{du}} &
      \normalfont{\textsc{pl}} \\ \hline % Header rule
    nom & % First row start
    \global\let\paradigmnewline@\\ % Redefine the way \\ works
    \global\let\\\paradigmnewline
    }
  {\end{tabular}
   \global\let\\\savenewline}% Restore meaning of \\ outside tabular
\makeatother

\begin{document}

\begin{tabular}{ >{\scshape}l | *{3}{>{\itshape}c} }
  & \normalfont{\textsc{sg}} & \normalfont{\textsc{du}} &
    \normalfont{\textsc{pl}} \\ \hline
  nom & agni\d{h} & agn\={\i} & agnaya\d{h} \\
  acc & agnim & agn\={\i} & agn\={\i}n \\
  ins & agnin\={a} & agnibhy\={a}m & agnibhi\d{h} \\
  dat & agnaye & agnibhy\={a}m & agnibhya\d{h} \\
  abl & agne\d{h} & agnibhy\={a}m & agnibhya\d{h} \\
  gen & agne\d{h} & agnyo\d{h} & agn\={\i}n\={a}m \\
  loc & agnau & agnyo\d{h} & agni\d{s}u \\
  voc & agne & agn\={\i} & agnaya\d{h}
\end{tabular}

\begin{paradigm}
  k\={u}pa\d{h} & k\={u}pau & k\={u}p\={a}\d{h} \\
  k\={u}pam & k\={u}pau & k\={u}p\={a}n \\
  k\={u}pena & k\={u}p\={a}bhy\={a}m & k\={u}pai\d{h} \\
  k\={u}p\={a}ya & k\={u}p\={a}bhy\={a}m & k\={u}pebhya\d{h} \\
  k\={u}p\={a}t & k\={u}p\={a}bhy\={a}m & k\={u}pebhya\d{h} \\
  k\={u}pasya & k\={u}payo\d{h} & k\={u}p\={a}n\={a}m \\
  k\={u}pe & k\={u}payo\d{h} & k\={u}pe\d{s}u \\
  k\={u}pa & k\={u}pau & k\={u}p\={a}\d{h}
\end{paradigm}

\end{document}

相关内容