我已经有一段时间没有问过令人尴尬的问题了,所以这里有一个供你娱乐的问题:我想打印一个能够适应各种列大小的数字表,所以不能使用tabular
类似的环境。
好吧,我认为这很简单,一个简单的解决方案(例如使用)\makebox[3em][r]{}
应该可以工作。当然,我需要在一侧留一个空格,以便它可以在行边界处断开。
事实上它确实有效漂亮的不错,但并不完全正确。因此,下面的结果似乎只有最后一行有问题,因为我使用下面的 MWE 得到了以下结果:
代码:
\documentclass{article}
\usepackage{showframe}
\usepackage{pgffor}
\newcommand*{\ListOrPrimes}{%
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229
}%
\begin{document}
\noindent
The sequence of primes is:
\medskip
{\raggedright%
\par\noindent\foreach \x in \ListOrPrimes{%
\makebox[4em][r]{\x}\space%
}%
\end{document}
答案1
如果您使用 LaTeX3 设施,前导空格和尾随空格的问题将会消失:
\documentclass{article}
\usepackage[pass,showframe]{geometry}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\printlist}{s O{4em} m}
{
\par\noindent
\IfBooleanTF#1
{ \clist_map_inline:Vn #3 { \grill_print_item:nn { #2 } { ##1 } } }
{ \clist_map_inline:nn { #3 } { \grill_print_item:nn { #2 } { ##1 } } }
\par
}
\cs_generate_variant:Nn \clist_map_inline:nn { V }
\cs_new:Npn \grill_print_item:nn #1 #2
{
\makebox[#1][r]{#2}~
}
\ExplSyntaxOff
\newcommand*{\ListOfPrimes}{
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229
}
\begin{document}
\noindent This is a list of primes:
\printlist*{\ListOfPrimes}
\medskip
\noindent This is another:
\printlist[2em]{2,3, 5, 7}
\end{document}
使用时,\printlist*
您可以给出一个控制序列作为参数(扩展为逗号分隔的列表);如果没有,*
您只需给出列表即可。可选参数是框的宽度。