Mit `lpeg` lassen sich beliebige Dateiformate einlesen.
\documentclass{article}
\usepackage{luacode}
\usepackage{xcolor}
\colorlet{s}{black}
\colorlet{b}{blue}
\colorlet{r}{red}
\begin{luacode*}
local lpeg = assert(require"lpeg")
local C, P, R, S = lpeg.C, lpeg.P, lpeg.R, lpeg.S
local space = S(" \t")^0
local line = S("\n\r")^0
local integer = space * R("09")^1 / tonumber
local sep = space * P("|")
local color = space * C(R("az"))
local function col(num, denom, color)
if (denom == 1) then
tex.sprint(string.format("\\textcolor{%s}{$%d$}",color,num))
else
tex.sprint(string.format("\\textcolor{%s}{$\\frac{%d}{%d}$}",color,num,denom))
end
end
local function row()
tex.sprint("\\medbreak")
end
local entry = ((integer * sep * integer * sep * color / col)^1 * line / row)^1
function parse(tab)
entry:match(tab)
end
\end{luacode*}
\begin{document}
\begin{luacode*}
parse[[
1 | 3 | s 1 | 1 | r
5 | 3 | b 11 | 3 | b
3 | 1 | r 19 | 3 | s
]]
\end{luacode*}
\end{document}
[![alt text][1]][1]
text][1]][2]
Das ganze in eine Tabelle zu packen überlasse ich mal als Übung. In ConTeXt ist das natürlich mal wieder unendlich einfacher...
\definecolor[s][black]
\definecolor[b][blue]
\definecolor[r][red]
\startluacode
local lpeg = assert(require"lpeg")
local C, P, R, S = lpeg.C, lpeg.P, lpeg.R, lpeg.S
local space = S(" \t")^0
local line = S("\n\r")^0
local integer = space * R("09")^1 / tonumber
local sep = space * P("|")
local color = space * C(R("az"))
local function col(num, denom, color)
if (denom == 1) then
context.NC(string.format("\\color[%s]{$%d$}",color,num))
else
context.NC(string.format("\\color[%s]{$\\frac{%d}{%d}$}",color,num,denom))
end
end
local function row()
context.NC()
context.NR()
end
local entry = ((integer * sep * integer * sep * color / col)^1 * line / row)^1
function parse(tab)
context.startTABLE{ frame="off", align="middle" align="middle,lohi" }
entry:match(tab)
context.stopTABLE()
end
\stopluacode
\starttext
\startluacode
parse[[
1 | 3 | s 1 | 1 | r
5 | 3 | b 11 | 3 | b
3 | 1 | r 19 | 3 | s
]]
\stopluacode
\stoptext
[![alt text][3]][3]
[1]: http://texwelt.de/wissen/upfiles/test_383.png
[2]: http://texwelt.de/wissen/upfiles/test_383.png
[3]: http://texwelt.de/wissen/upfiles/test_384.png