in reply to Equilateral Pascal's Triangle in perltex

The main trick is to double the number of columns plus one and to fill the void symmetrically...

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 cosmeti +cs) 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);
This was the output of the original version:
\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}
This is the output of the patched version:
\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}
My LaTeX installation is gone, but there's a nice LaTeX Online-Compiler available.
HTH

Update: The code presented above is a runnable Perl program. In order to make it work with LaTeX you need to get rid of use strict; and print pascalMatrix(10);. Furthermore, replace sub pascalMatrix by \perlnewcommand{\pascalMatrix}[1]. Remove, rename, or uncomment the previous version of \pascalMatrix.

Replies are listed 'Best First'.
Re^2: Equilateral Pascal's Triangle in perltex
by Anonymous Monk on Jul 08, 2017 at 06:13 UTC

    do not forget \usepackage{perltex} so the whole looks like:

    \documentclass{article} \usepackage{perltex} \perlnewcommand{\pascalMatrix}[1] { 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 cosmeti +cs) 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"; } \begin{document} \pascalMatrix{10} \end{document}
Re^2: Equilateral Pascal's Triangle in perltex
by Coach (Initiate) on Jun 01, 2009 at 19:55 UTC
    Thank you so much for your reply! I tried running the code you posted with perltex, but it gives the following errors (1)Undefined control sequence (2)end occured inside a group at level 3. This is probably some stupid mistake, but I just can't figure it out.