按列输入表格的命令

按列输入表格的命令

这个问题是这个问题;那里的出色回应让我能够非常轻松地为我正在研究的语法书中的示例制作表格,其中一行代表一种语言,下一行代表相应的翻译。例如,以下示例由其下方的代码生成:

在此处输入图片描述

\begin{ExampleRow}
\dakota{čhaŋté + oyúze,   čhaŋtóyuze,    čhaŋté + ohnáka,  čhaŋtóhnaka}
\english{heart + condition of,  disposition,    heart + to place inside,    to cherish}
\gap 
\dakota{ȟe + o + púza, ȟópuza,    napé + ožáža  ,napóžaža}
\english{mountain+ place + dry, desert, hand + washing place,   sink}
\end{ExampleRow}

这种快速生成风格统一的表格的方法非常有用;我一直在尝试利用自从提出上一个问题以来学到的知识,并应用它来制作一个类似的命令来生成功能类似的表格(即,您不需要事先指定行数或列数)而是转置,即相同语言/字体的单词出现在列而不是行中。

更具体地说,我希望创建一个命令ExampleCol,当给出以下输入时,

\begin{ExampleCol}
\dakota{čhaŋté + oyúze,   čhaŋtóyuze,    čhaŋté + ohnáka,  čhaŋtóhnaka}
\english{heart + condition of,  disposition,    heart + to place inside,    to cherish} 
\end{ExampleCol}

将产生下表:

在此处输入图片描述

我会尽力总结我目前所掌握的内容:这是第一个表(按行输入)的最小工作示例

\documentclass{memoir}
\usepackage{fontspec}
\usepackage{booktabs}
\usepackage{etoolbox}

\newfontfamily\dak{Linux Biolinum O}
\newfontfamily\eng{JosefinSans-SemiBold}

\renewcommand{\arraystretch}{1.2}
\newcommand{\gap}{\\[-1.2ex]}

\newcommand{\doenglish}[1]{\appto\temp{&\eng{#1}}}
\newcommand{\dodakota}[1]{\appto\temp{&\dak{#1}}}

\newcommand{\english}[1]{%
\def\temp{}% initialize to empty
\forcsvlist{\doenglish}{#1}% add entries
\appto\temp{\\}% end the row
\temp % deliver contents
}

\newcommand{\dakota}[1]{%
\def\temp{}% initialize to empty
\forcsvlist{\dodakota}{ #1}% add entries
\appto\temp{\\}% end the row
\temp % deliver contents
}

\newenvironment{ExampleRow}
{\begin{center}
\begin{tabular}{ c@{} *{\maxcolumns}{c} } \toprule
{\bottomrule\end{tabular}
\end{center}}

\def\maxcolumns{20}


\begin{document}
\begin{ExampleRow}
\dakota{čhaŋté + oyúze,   čhaŋtóyuze,    čhaŋté + ohnáka,  čhaŋtóhnaka}
\english{heart + condition of,  disposition,    heart + to place inside,    to cherish}
\gap 
\dakota{ȟe + o + púza, ȟópuza,    napé + ožáža  ,napóžaža}
\english{mountain+ place + dry, desert, hand + washing place,   sink}
\end{ExampleRow}
\end{document}

在浏览了本网站上以前的问题后,我尝试修改了这个问题满足我的需求。这是我的尝试(可以添加到上面给出的最小示例文件中以运行)

\newcount\rowc
\makeatletter

\def\ExampleCol{
\centering
\hbox\bgroup
\let\\\cr
\def\ruleb{
\ifnum\rowc=1\hrule height 1pt \else
\fi}
\valign\bgroup
\global\rowc\@ne
\hbox to 6em{\strut \hfill##\hfill}%
\ruleb
&&%
\global\advance\rowc\@ne
\hbox to 6em{\strut\hfill##\hfill}%
\ruleb
\cr}
\def\endExampleCol{%
\crcr\egroup\egroup}

使用此功能,以下代码将生成附图:

\begin{ExampleCol}
\dakota{wáŋča, núŋpa, yámni, tópa, záptaŋ,sákpe}
\english{one, two, three, four, five, six}  
\end{ExampleCol}

在此处输入图片描述

看起来很棒(除了我想要在表格底部有一个水平条,但不想事先指定它的高度,并且顶部栏离文本太近了)

但是,这个解决方案对我来说不起作用,因为单元格似乎是固定大小的,如果我尝试在表格中输入较长的单词,相邻单元格会重叠。例如,以下代码

\begin{ExampleCol}
\dakota{čhaŋté + oyúze,   čhaŋtóyuze,    čhaŋté + ohnáka,  čhaŋtóhnaka}
\english{heart + condition of,  disposition,    heart + to place inside,    to cherish} 
\end{ExampleCol}

生成下表:

在此处输入图片描述

如果您能提出任何关于如何创建一个用于在此类列中输入表格的环境且不存在相同问题的好方法的建议,我们将不胜感激!

答案1

这也许不是实现此目的的最佳方法,但在表中向下遍历列表非常繁琐,因为您必须存储由于单元格分组而当前正在处理的行。

这可能是一个非常无效的解决方案——每次行计数器增加时它都会处理列表。

\documentclass{article}

\usepackage{etoolbox}

\listgadd{\Dakotalist}{}
\listgadd{\Englishlist}{}

\newcounter{rowcounter}
\newcounter{temprowcounter}

\newcommand{\processlist}[2]{%
  \typeout{#1}%
  \stepcounter{temprowcounter}%
  \ifnumless{\value{temprowcounter}}{#1}{%
  }{%
    \xdef\@@@@@localtemp{#2}%
    \listbreak%
  }%
}



\newcommand{\showrows}[2]{%
  #1 & #2 \tabularnewline
}

\newcommand{\processrows}[2]{%
  \stepcounter{rowcounter}%
  \setcounter{temprowcounter}{0}%
  \forlistloop{\processlist{\number\value{rowcounter}}}{#1}%
  \showrows{#2}{\@@@@@localtemp}%
}
\newcommand{\followrows}[2]{%
  \setcounter{rowcounter}{0}%
  \forlistloop{\processrows{#2}}{#1}%
}


\begin{document}

\forcsvlist{\listgadd\Dakotalist}{eins,zwei,drei,vier}
\forcsvlist{\listgadd\Englishlist}{one,two,three,four}


\begin{tabular}{lr}
\followrows{\Englishlist}{\Dakotalist}
\tabularnewline
\end{tabular}

And now reversed...

\begin{tabular}{lr}
\tabularnewline
\followrows{\Dakotalist}{\Englishlist}
\end{tabular}



\end{document}

在此处输入图片描述

相关内容