use strict;
sub pascalMatrix {
my $tabularRows = "";
my @row = (1);
my $cols = ($_[0] * 2) + 1; #add: final number of columns
my $filler = "{ }"; #add: used to mark an empty entry
for (my $r = 0; $r <= $_[0]; $r++) {
# Output the current row
### begin of modification
# insert a filler between each item (sprintf is for LaTeX cosmetics)
my @fmt = map { (sprintf("%3d",$_), $filler) } @row; pop @fmt;
# pre-/append a filler until final number of columns reached
unshift(@fmt,$filler), push(@fmt,$filler) while (@fmt < $cols);
$tabularRows .= join (" & ", @fmt) ." \\\\\n";
### end of modification
# Generate the next row
my @nextRow = (1);
for (my $c = 1; $c <= $r; $c++) {
push @nextRow,
@row[$c - 1] + @row[$c];
}
push @nextRow, 1;
@row = @nextRow;
}
return
"\\begin{tabular}{*{$cols}{c}c}\n" . # changed!
$tabularRows .
"\\end{tabular}\n";
}
print pascalMatrix(10);
####
\begin{tabular}{*{5}{c}c}
1 \\
1&1 \\
1&2&1 \\
1&3&3&1 \\
1&4&6&4&1 \\
1&5&10&10&5&1 \\
\end{tabular}
####
\begin{tabular}{*{11}{c}c}
{ } & { } & { } & { } & { } & 1 & { } & { } & { } & { } & { } \\
{ } & { } & { } & { } & 1 & { } & 1 & { } & { } & { } & { } \\
{ } & { } & { } & 1 & { } & 2 & { } & 1 & { } & { } & { } \\
{ } & { } & 1 & { } & 3 & { } & 3 & { } & 1 & { } & { } \\
{ } & 1 & { } & 4 & { } & 6 & { } & 4 & { } & 1 & { } \\
1 & { } & 5 & { } & 10 & { } & 10 & { } & 5 & { } & 1 \\
\end{tabular}