适应各种宽度的数字表

适应各种宽度的数字表

我已经有一段时间没有问过令人尴尬的问题了,所以这里有一个供你娱乐的问题:我想打印一个能够适应各种列大小的数字表,所以不能使用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*您可以给出一个控制序列作为参数(扩展为逗号分隔的列表);如果没有,*您只需给出列表即可。可选参数是框的宽度。

相关内容