最近我用莱克斯准备一份婚礼上200多位来宾的名单(见下图第1页)。其实,这是一张表格,上面列有受邀家庭的姓名、每个受邀家庭的人数、分配给每个家庭的桌子号码以及备选桌子号码。
该表格最初是在电子表格中创建的,之后提取为csv
文件,作为最终“宾客名单”的基础。姓氏(表格第一列)已按字母顺序排列。姓氏采用小写字母,替代表格行着色(用于 LyX 中的长表)、粗体数字指的是表格和其他字体细节。
此外,我在姓氏以“新”字母开头之前手动插入了大写字母,以给出按字母顺序分组的名字的感觉,并在总共 50 到 100 人等候在活动大厅入口处并被引导到他们的桌子时轻松追踪他们。
问题:有没有办法使用“普通”的、已排序的名称列自动插入带有大写字母的单行作为“断点”(如上文附页所示)?如何在每个“字母”行中自动添加一些自定义命令,例如\hiderowcolors{}
在\showrowcolors{}
每个后续行中?我想这样的方法可能有助于创建更易于阅读的长“来宾名单”。
答案1
让电子表格在写入 csv 文件时添加标题可能会更容易,但无论如何,如果您希望 Tex 执行此操作,则请执行以下操作:
\documentclass{article}
\usepackage{longtable}
\usepackage[table]{xcolor}
\makeatletter
\let\savedcr\LT@tabularcr
\def\LT@tabularcr{\xxLT@tabularcr\savedcr}
\let\savedendhead\endhead
\def\endhead{\xxLT@tabularcr\savedendhead}
\def\xxLT@tabularcr#1#2{%
\ifcat a\noexpand#2%
\if\thisletter#2%
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{\expandafter#1\expandafter\letterrow\expandafter#2\expandafter}%
\fi
\savedcr#2}
\def\letterrow#1{%
\noalign{\gdef\thisletter{#1}}%
\rowcolor{blue}%
\multicolumn{\LT@cols}{c}{%
\color{white}%
\global\advance\rownum\m@ne
\bfseries\thisletter}}
\makeatother
\begin{document}
\rowcolors{1}{gray!20}{white}
\def\thisletter{?}
\def\zzz#1{\def\a{#1}\show\a#1}
\begin{longtable}{ll}
\rowcolor{yellow}Name&Number\\
\hline
\endhead
Apple & 2\\
Artichoke &3\\
Banana&1\\
Cabbage&6\\
Cucumber&8
\end{longtable}
\end{document}