I think the questions says it all! :)
By TeX, I mean any derivative of TeX as long as the code is clearly a derivative of TeX, i.e. that it could belong on TeX.SX (and not pure Lua for example).
I'll give two answers myself so you see what I mean.
I think that Steve Hicks controller for a Mars Rover programmed in TeX is a good candidate: ICFP Contest 2008 - Mars rover in TeX.
Adding coffee stains to your documents
If my documents don't have those stains, my boss / students think(s) I don't drink coffee. If he or they think I am not drinking coffee, they believe I am slacking. Thanks Hanno!
David Carlisle's Christmas 'card' at http://www.ctan.org/pkg/xii. In fact, here it is: run this through plain TeX:
\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye
A good collection of Enjoy TeX pearls diving! at GUST, Polish TeX Users Group
For more Pearls of TeX programming at TUGboat ,Volume 26 (2005), No. 3.
a basic interpreter written in tex.
see the tugboat article.
Our own Bruno LeFloch who wrote a Reversi game which runs in the console:
(Please don't try to reformat the code displayed below unless you really know what you are doing; if you do attempt a reformat, try to compile the resulting code before replacing the code here.)
% !TEX TS-program = tex
\long\def\3#1#2#3{}\vsize5cm\hsize4cm\newlinechar`*\def~#1{\catcode`#113~}
~QSU_VWJKLMNO@XY[](|+Z'"z:qj^;/)!,\ ${*13\3}
\def~#1#2{\let#1#2~}~*\cr[\ifnum(\ifcaseO\or|\else]\fiN\number@\advanceX
\expandafterZ\globalY\message~\defj{[0<Q[9>Q[0<J[9>J^|_]|_]|_]|_]}
~+{\count1}+1=9~_#1{@+1 1\countdef#1+1_}_QJVSKWUL,'"$\H!_-1'1"2+44'+55'+45"+54"~^{+NQNJ}
~:#1{#11#12#13#14#15#16#17#18}
~M#1{Y{#1}#1}~\h#1#2{M#2:{ \q#1}&M#2&M{*}}~\q#1#2{&M{(+#1#2 O-O0]}}
~/{Y{Row and column? e.g. E6*}\read_to\MX\j\meaning\M ;}
~\j#1->#2#3#4;{Q`#2@Q-`@J`#3@J-`0;(VY{Invalid move.}
/]}~;{V0 (jS1z1z0z_S0z1z_S_z1z0z_]}~\_{@,('O-]}
~z#1{{\H0K#1!1{\H1q}(!q]}}~q{@QS@JK[j="(\HZ^'Z\_2]\&q|[j='ZVV($(\H|Z!0]]]]}~\,#1{Q#1:\.}
~\.#1{J#1;[0<V\&[V>WWVUQLJ]]}~\^#1{(#1O0O1O2O2O2O2O1O0]}
~\&{!\^Q\multiply!3@!\^J@V(!9O1O6O1O1O2O6O2O4] }~\Z{M :{&M}&M{*}}
~){'X"X"N'\halign{&## *M{*}
\Z\h1A\h2B\h3C\h4D\h5E\h6F\h7G\h8H\Z}
\vfil\break$1W(W_|0] :\,$0 [0<W[1='QUJL|/];^'\_1][_=WM
{(,Tie| Player [0>,-|0] wins by N[0>,-],].}X\end])})
reverxii
in reminescence to David Carlisle. Just compare Peter Flynn’s answer here.
I once spent hours learning enough TeX to format my ex-gf's resume for printing on the computing center laser printer (back when laser printing was magical) and used up most of my monthly laser printing quota printing copies of it -- all under the mistaken belief that she'd see that she was crazy to break up with me.
Not surprisingly, it turned out to be a useless waste of my time (and in retrospect, it was me that should have broken up with her). Worse, word got around that I was a "TeX expert" and I ended up spending the rest of my computer center operator job helping grad students format their theses
Not typesetting the solution (actually, also typesetting the solution of course :)), but more bizarrely implementing the bisection and secant non-linear solvers in TeX!
pgfplots
. Obviously, my search is ended. (Oh, this only does algebraic equations. Boooo!)
Commented
Mar 25, 2013 at 20:11
This one is probably my best:
:)
)But there are a few of them scattered around on this site. Here are my picks:
Forcing LaTeX to produce a different PDF on each compile (never reaching a stable output)
... and, as a bonus:
I really don't see why someone would go back to MS Office after using LaTeX... Now that's weird! ;)
EDIT: and i just remembered this one (Why facebook implemented it? But why recreate it in LaTeX? ;)
):
:)
Commented
Mar 29, 2013 at 21:49
Generates π, using the formula
pi=16*arctan(1/5)-4*arctan(1/239)
and leaves the result in an array \xr
, printing what it’s calculated as it goes along.
Well, as made famous by a question of mine I have used LaTeX to make to make props for a Call of Cthulhu game. I also posted the finished product on my blog.
Then later on I used the same technique to make my teaching assistant's life a bit more interesting
Implementing the bisection method (and other numerical methods) in TikZ,
for exposition purposes.
EDIT: Great thanks to percusse for helping me improve my \ifg
command.
\documentclass[dvipsnames]{beamer}
\usepackage{lmodern}
\usepackage{pgfplots}
\usefonttheme[onlymath]{serif}
\setbeamertemplate{navigation symbols}{}
% 'if #1 greater than #2 then #3 else #4' construct (compatible with pgfmath)
\newcommand{\ifg}[4]{
\pgfmathparse{(#1)>(#2)?int(1):int(0)}
\ifnum\pgfmathresult=1relax%
#3%
\else%
#4%
\fi%
}
\begin{document}
\begin{frame}[fragile]
\begin{center}
\begin{tikzpicture}[scale=6]
\pgfmathsetmacro{\extendxaxis}{.1}
\pgfmathsetmacro{\extendyaxis}{.3}
\colorlet{acolor}{red}
\colorlet{bcolor}{OliveGreen}
\colorlet{ccolor}{orange}
\colorlet{fcolor}{blue}
\pgfmathdeclarefunction{f}{1}{\pgfmathparse{.5*(exp(-#1)-#1)}} % continuous function
\pgfmathsetmacro{\ao}{.2} % lower-bound of initial bracket
\pgfmathsetmacro{\bo}{1} % upper-bound of initial bracket
\pgfmathsetmacro{\co}{0} % midpoint of inital bracket (initialised at 0)
\pgfmathtruncatemacro{\n}{3} % number of iterations
\ifx\ao\bo % check that \ao and \bo are distinct
\node[red] (0,0) {Bisection impossible: singleton initial bracket.};
\else%
\ifg{\ao}{\bo}{ % if \ao > \bo, swop them
\pgfmathsetmacro{\temp}{\bo}
\pgfmathsetmacro{\bo}{\ao}
\pgfmathsetmacro{\ao}{\temp}
}{}
% code in here
\ifg{{f(\ao)*f(\bo)}}{0}{%
\node[red] (0,0) {Bisection impossible: no root in initial bracket.};
}{%
\onslide<1->{%
\pgfmathsetmacro{\xmin}{\ao-.5*\extendxaxis*(\bo-\ao)}
\pgfmathsetmacro{\xmax}{\bo+.5*\extendxaxis*(\bo-\ao)}
\draw[->] (\xmin,0) node[left] {$0$} --
(\xmax,0) node[right] {$x$};
\pgfmathsetmacro{\ymin}{min(f(\ao),f(\bo))-.5*\extendyaxis*abs(f(\bo)-f(\ao))}
\pgfmathsetmacro{\ymax}{max(f(\ao),f(\bo))+.5*\extendyaxis*abs(f(\bo)-f(\ao))}
\draw[->] (\xmin,\ymin) -- (\xmin,\ymax) node[left] {$f(x)$};
\draw[fcolor] plot[domain=\xmin:\xmax] (\x,{f(\x)});
}
\pgfplotsforeachungrouped \k in {1,2,...,\n}{%
\pgfmathtruncatemacro{\k}{\k}
\pgfmathsetmacro{\co}{0.5*(\ao+\bo)}
\pgfmathtruncatemacro{\j}{\k-1}
\pgfmathtruncatemacro{\fromslide}{3*(\k-1)+2}
\pgfmathtruncatemacro{\toslide}{\fromslide+2}
\onslide<\fromslide-\toslide>{
\draw[thick,acolor] (\ao,.1ex) --
(\ao,-.1ex) node[below] {$a_{\j}$}; % a0
\draw[thick,bcolor] (\bo,.1ex) --
(\bo,-.1ex) node[below] {$b_{\j}$}; % b0
}
\pgfmathtruncatemacro{\fromslide}{\fromslide+1}
\onslide<\fromslide-\toslide>{%
\draw[thick,ccolor] (\co,.1ex) --
(\co,-.1ex) node[below] {$c_{\j}$};
}
\onslide<\toslide>{%
\coordinate (a0) at (\ao,{f(\ao)});
\draw[dashed,thin,red] (a0 |- \xmin,0) -- (a0)
-- (a0 -| \xmin,0) node[left] {$f(a_{\j})$};% dashed lines
\draw[fill,red] (a0) circle (.05ex);
\coordinate (c0) at (\co,{f(\co)});
\draw[dashed,thin,orange] (c0 |- \xmin,0) -- (c0)
-- (c0 -| \xmin,0) node[left] {$f(c_{\j})$};% dashed lines
\draw[fill,orange] (c0) circle (.05ex);
}
\ifg{f(\ao)*f(\co)}{0}{ % bisection iteration
\pgfmathsetmacro{\ao}{\co}
}{%
\pgfmathsetmacro{\bo}{\co}
}
\ifx\n\k%
\pgfmathtruncatemacro{\toslide}{\toslide+1}
\pgfmathtruncatemacro{\j}{\j+1}
\onslide<\toslide>{%
\draw[thick,acolor] (\ao,.1ex) --
(\ao,-.1ex) node[below] {$a_{\j}$}; % a0
\draw[thick,bcolor] (\bo,.1ex) --
(\bo,-.1ex) node[below] {$b_{\j}$}; % b0
}
\fi
}
}
\fi
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
\end{frame}
and it works. The manual states for using fragile
: “In this case, […] the \end{frame}
must be alone on a single line.”
Commented
Mar 25, 2013 at 19:56
Providing an excuse for slacking off
Just let (La)TeX burn some CPU cycles while you are relaxing.
Enrico “egreg” Gregorio posted this into our TeX.sx chat:
Let me name it xcix.tex
, because it’s in the manner of David Carlisle’s xii.tex
, cf. Peter Flynn’s answer
\let~\catcode~`x13~`q~`x~`z~`q~`H~`q~`B~`H~`j0~`jA009
jlet~jlet~Hjpar ~Bjmscount~~jdef~x{q bottlez of beer}
~jw{x on the wall}~jt{jadvanceAB-1ATake one down Aand
pass it around,H}B99~ji{jifnumB}~q{ji=0Nojelsejnumber
Bjfi}~z{ji>1sjfiA }jloop jifnumB>0 jw, x,Hjtjw.jvskip
8ptplus1ptjrepeat Time to buy some more beerjdotsjend
The same as LaTeX3 version
\documentclass{article}
\usepackage{xparse}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1.5ex}
\ExplSyntaxOn
% user level command
\NewDocumentCommand{\beers} { O{99} }
{
\manual_beers_sing:n { #1 }
}
% variables
\int_new:N \l_manual_beers_count_int
% functions
\cs_new_protected:Npn \manual_beers_sing:n #1
{
\int_set:Nn \l_manual_beers_count_int { #1 }
\prg_replicate:nn { \l_manual_beers_count_int }
{
\manual_beers_print:
\int_decr:N \l_manual_beers_count_int
}
Time ~ to ~ buy ~ some ~ more ~ beer ~ \dots
}
\cs_new_protected:Npn \manual_beers_print:
{
\manual_beer_text:nn { ~ on ~ the ~ wall }{ 0 }, ~
\manual_beer_text:nn { } { 0 }, \\
Take ~ one ~ down ~ and ~ pass ~ it ~ around, \\
\manual_beer_text:nn { ~ on ~ the ~ wall } { -1 }.\par
}
\cs_new:Npn \manual_beer_text:nn #1 #2
{
\int_case:nnF { \l_manual_beers_count_int + #2 }
{
{ 0 } { No ~ bottle ~ of ~ beer }
{ 1 } { 1 ~ bottle ~ of ~ beer }
}
{
\int_to_arabic:n { \l_manual_beers_count_int + #2 } ~ bottles ~ of ~ beer
}
#1
}
\ExplSyntaxOff
\begin{document}
\beers
\end{document}
(source link, small correction; the code as seen above is, though, in this version, as it will appear in a manual by Enrico, which is in the moment, this code was posted, in process of writing)
This was influenced by me, because I had posted these two links:
99 Bottles of Beer | Language TeX/LaTeX (for compilation read comment of Kiyoshi Akima below that code)
99 Bottles of Beer | Language LaTeX2e loading fmtcount
and tikz
(which has a link to an older version 99 Bottles of Beer | Language LaTeX2e working with memoir
and loading only ifthen
)
\mscount
? I surmise it is like \newcount
, but cannot find it anywhere. Thanks a lot in advance.
At this stage, having seen a lot of bizarre things done with LaTeX by users :-) I should probably add the bookshelf
package I posted to CTAN recently.
This takes a BiBTeX file (eg your thesis) and turns it into an image of a bookshelf so you can use it as a background during video calls; in my case to cover up the fact that my bookshelves were hideously untidy :-)
…emulates an 8-bit CPU (ATmega8).
:)