使用标记列表构建表格内容时单元格中的额外空间

使用标记列表构建表格内容时单元格中的额外空间

我的代码的哪一部分导致第一列错位?额外的空间似乎随着行数的增加而增加。(我的部分代码来自构建表时,如何在 foreach 或条件(或其他组/环境)中使用与号 (&)?

代码:

\documentclass{article}

\makeatletter
\newtoks\@tabtoks
\newcommand\addtabtoks[1]{\global\@tabtoks\expandafter{\the\@tabtoks#1}}
\newcommand\eaddtabtoks[1]{\edef\mytmp{#1}\expandafter\addtabtoks\expandafter{\mytmp}}
\newcommand*\resettabtoks{\global\@tabtoks{}}
\newcommand*\printtabtoks{\the\@tabtoks}
\makeatother

\newcommand{\topic}[2]{%
   \eaddtabtoks{Col 1 & Col 2 & Col 3 & #1 & #2}
   \addtabtoks{\\}
}

\newenvironment{mytabular}{%
   \resettabtoks
   \tabular{llrrl}
}{%
   \printtabtoks
   \endtabular
}

\begin{document}

\begin{mytabular}
   \topic{1.1}{LaTeX}
   \topic{1.2}{causes}
   \topic{1.3}{me}
   \topic{1.4}{lots}
   \topic{1.5}{of}
   \topic{1.6}{frustration}
\end{mytabular}

\end{document}

输出:

在此处输入图片描述

答案1

通常情况下,罪魁祸首是行尾引入的杂散空格。由于标记列表的性质(在tabular流程结束时添加到),所有这些杂散空格都会在标记列表被转储之前添加,这意味着所有杂散空格都会作为单元格 (1,1) 的前导填充添加。

在这种情况下,修复不仅意味着%在宏定义中的行尾添加一些,而且还意味着合并\ignorespaces到的定义中\topic,因为每次调用时\topic,杂散空格也会作为输入流的一部分引入。

我还概括地mytabular将格式作为一个参数。

\documentclass{article}
\usepackage[T1]{fontenc}
\makeatletter
\newtoks\@tabtoks
\newcommand\addtabtoks[1]{\global\@tabtoks\expandafter{\the\@tabtoks#1}}
\newcommand\eaddtabtoks[1]{\edef\mytmp{#1}\expandafter\addtabtoks\expandafter{\mytmp}}
\newcommand*\resettabtoks{\global\@tabtoks{}}
\newcommand*\printtabtoks{\the\@tabtoks}

\newcommand{\topic}[2]{%
   \eaddtabtoks{Col 1 & Col 2 & Col 3 & #1 & #2}%
   \addtabtoks{\\}%
   \ignorespaces
}

\newenvironment{mytabular}[1]{%
   \resettabtoks
   \noindent
   \begin{tabular}{#1}%
}{%
   \printtabtoks
   \end{tabular}
}
\makeatother

\begin{document}

\begin{mytabular}{llrrl}
   \topic{1.1}{LaTeX}
   \topic{1.2}{causes}
   \topic{1.3}{me}
   \topic{1.4}{lots}
   \topic{1.5}{of}
   \topic{1.6}{frustration}
\end{mytabular}

\end{document}

在此处输入图片描述

相关内容