If you have no idea about LaTeX you can get a brief intro­duc­tion here.

My first expo­sure to the type­set­ting engine LaTeX came through a book, which I lay­outed in 2008 as doc­u­men­ta­tion for an audio instal­la­tion. Some time before we had pub­lished a paper about this instal­la­tion and there­fore most of our mate­r­ial was already pre­pared for LaTeX. To build upon this paper to lay­out the book seemed like the per­fect chance to learn more about LaTeX. I was very inter­ested if the alter­na­tive approach (WYSIWYM not WYSIWYG) would give me a dif­fer­ent sight on DTP. After play­ing around for some time and climb­ing up a steep learn­ing curve, the book was fin­ished and I ended up with some basic knowl­edge of LaTeX.

When GOTO10 asked me to do the design for their makeart fes­ti­val, it felt again like the per­fect moment to con­tinue the exper­i­ments and com­bine the type­set­ting and lay­out­ing through LaTeX with a scripted gen­er­a­tion of ASCII .tex files. The goal was to develop a soft­ware setup which draws from the abun­dant resources of FLOSS and dif­fer­en­ti­ates from the cur­rent mono­cul­ture in graphic design, employ­ing two fun­da­men­tal ideas, com­ing both from a meme com­plex called The UNIX Phi­los­o­phy.

The first of these inspi­ra­tions is to store data in flat ASCII files. This way you ensure that data can eas­ily be read and manip­u­lated. Because LaTeX takes plain text files as input, you can use any­thing that is capa­ble of edit­ing text files to write con­trol files that describe your doc­u­ment. These con­trol files can be used in the next step to out­put pdf files (or other things). There­fore you do not depend on soft­ware focused on desk­top pub­lish­ing, but you can use the wide array of text manip­u­la­tion tools (awk, cut, diff, grep, head, lex, more, perl, sed, sort, tail, test, wc)* which come shipped with every Unix-like sys­tem. Addi­tion­ally to its built-in func­tions you can define own macros with LaTeX.

\newcommand{\grid}[9]{%
\begin{picture}(0,3.1)%
\put(0,2){#1}% |}
\put(0,1){#4}% |}
\put(0,0){#7}% |}
\put(1,2){#2}% |}
\put(1,1){#5}% |}
\put(1,0){#8}% |}
\put(2,2){#3}% |}
\put(2,1){#6}% |}
\put(2,0){#9}% |}
\end{picture}%
}

The new com­mand \grid{}{}{}{}{}{}{}{}{} takes nine inputs that will be arranged accord­ing to the \put–com­mand on the can­vas. You can write:

\documentclass[10pt]{scrartcl}
\begin{document}
\grid{1}{2}{3}{4}%
{6}{7}{8}{9}
\end{document}

and com­pile your doc­u­ment using pdflatex, what will give you a page with nine num­bers arranged on the can­vas. Or instead of bor­ing num­bers, you can put some­thing else in your grid. And that’s were the sec­ond par­a­digm comes in. Use soft­ware lever­age to your advan­tage.

Auto­mate every­thing — sim­ply put, take advan­tage of the com­put­ing envi­ron­ment to do as much work for you as pos­si­ble. *

Since all you have to deal with is plain text you could eas­ily write a pro­gram that writes some code for you. A grid in the grid for example:

\grid{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}{\grid{1}{2}{3}{4}{5}{6}{7}{8}{9}
}

And of course you could tell this pro­gram not to write num­bers, but a macro com­mand that draws a graphic:

\newcommand{\graphic}[7]{%
\setlength\fboxsep{0pt}%
\setlength\fboxrule{#7}%
\fbox{%
\includegraphics[viewport=#2 #3 #4 #5,clip,#6]{#1}%|
}%
~
}

In prac­tice this was bit more com­pli­cated, for hav­ing a lot of excep­tions and workarounds, but in gen­eral every­thing went pretty well. Read on or have a look at the source.

CTAN lion draw­ing by Duane Bibby