考虑以下 Latex3 的示例用法\clist_map_inline:nn
:
\documentclass[margin=0.1cm]{standalone}
\usepackage{expl3}
\begin{document}
\begin{tabular}{|c|c|}
\hline%
\ExplSyntaxOn%
\clist_map_inline:nn {A,B,C,D}%
{#1: & something \\\hline}%
\ExplSyntaxOff%
\end{tabular}
\begin{tabular}{|c|c|}
\hline%
\ExplSyntaxOn%
\clist_map_inline:nn {A,B,C}%
{#1: & something \\\hline}%
\ExplSyntaxOff%
D: & something \\\hline
\end{tabular}
\end{document}
结果:
为什么第一个表格底部有一个多余的空行?
答案1
您可以使用以下方法避免此问题\clist_use:Nn
:
\documentclass[margin=0.1cm]{standalone}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\makerow}{mm}
{
\clist_set:Nn \l_tmpa_clist { #1 }
\clist_use:Nn \l_tmpa_clist { #2 }
#2
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{|c|c|}
\hline
\makerow{A,B,C,D}{& something \\\hline}
\end{tabular}
\begin{tabular}{|c|c|}
\hline
\makerow{A,B,C}{& something \\\hline}
D: & something \\\hline
\end{tabular}
\end{document}
问题在于\clist_map_inline:nn
它让 TeX 处于新单元已经开始的状态。
答案2
正如 Egreg 所说:
它使 TeX 处于新单元已经开始的状态。
我认为这是因为您\clist_map_inline:nn
处于tabular
环境中,所以如果您仍然想使用map
(用于编程),您可以在 goto 之前生成表的内容tabular
。
\documentclass{article}
\usepackage{expl3}
\begin{document}.
\ExplSyntaxOn
% A variable for save contents.
\tl_gclear_new:N \g_thomas_tableContent_tl
\clist_map_inline:nn {A,B,C,D}{
\tl_gput_right:Nx \g_thomas_tableContent_tl {
#1: & something \exp_not:n {\\ \hline}
}
}
% Copy to LaTeX2e's macro.'
\cs_gset_eq:NN \tableContent \g_thomas_tableContent_tl
\ExplSyntaxOff
\begin{tabular}{|c|c|}
\hline
\tableContent
\end{tabular}
\end{document}
注意,\tl_gput_right:
我使用Nx
了。因为我需要在表中\exp_not:n {\\ \hline}
使用变量 ( ),所以需要扩展。如果不需要扩展,也可以使用。\l_tmpa_tl
Nn