Konverze plainTeX na html

Petr Olsak petr at olsak.net
Mon Mar 8 10:13:54 CET 2004


On Thu, 4 Mar 2004, Petr Mandys wrote:

> Zdravim,
>
> nemate nekdo zkusenosti s konverzi plainTeXu do html? Dival jsem se na
> TtH, ale to nevypada prilis uspokojive.

Dotaz na to, zda mohu pomoci nejakeho konvertitka z plainTeXoveho
zdrojaku dostat XML resp. HTML je v posledni dobe docela casty.
Zkuseni uzivatele pak napisi odpoved, ze externi konvertitko (pokud
neumi do posledniho \expandafter a \futurelet emulovat TeX) nema
sanci, protoze plainovy uzivatel si pise makra sam a jeho znackovani
dokumentu je casto velmi specificke a sverazne.

Dalsi uzivatel odpovi, ze nejlepsi je mit primarni informace
ulozeny rovnou v XML a delat radeji konverzi do TeXu.

Dovolim si zde uvest jinou cestu, ktera se mi zdala docela schudna.
Zvlaste tehdy, pokud dokument neobsahuje zadnou matematiku.
Me se osvedcilo zachovat primarni informace v TeXovem zdrojaku,
protoze se to docela prijemne prohlizi a modifikuje obycejnym textovym
editorem. Kdyz jsem dostal od zakaznika pozadavek na vystup v XML,
podival jsem se na pozadovane DTD, napsal podle toho za pul hodinky
kratka makra a pouzil jsem pro konverzi samotny TeX. Tato cesta se
ukazala podstatne snadnejsi, nez jsem si puvodne myslel.

Kazdy rozumny plainista ma v dokumentu oddelenu oblast maker od
oblasti dobre strukturovaneho a znackovaneho dokumentu (trebaze
sveraznym zpusobem). Ja osobne mam tyto dve veci v jednom souboru.
Mezi oblast maker a oblast vlastniho textu dokumentu jsem pridal:

% \input xmlout.tex

V pripade, ze chci XML vystup, odstranim jednoduse procento.
V souboru xmlout.tex mam re-definice vsech maker vyhrazenych pro
znackovani dokumentu. Protoze oznackovany dokument rozumnym
plainistou ma stejnou miru informace jako obvykly XML dokument
a autor textu vetsinou nebude ochoten dodavat informace dalsi, je
konverze docela primocara.

Pro ilustraci uvadim cast souboru xmlout.tex ze zakazky pro Verlag
(viz http://www.olsak.net/texpraxe.html). Pro znackovani kapitol jsou
pouzita makra \dil, \kap, pro znackovani okraju vedle textu makro
\okraj, pro vyznaceni prikazu pro prikazovou radku pocitace
(uvnitr textu odstavce sazena strojopisem) je pouzito makro \cmd a
pro vyznaceni useku textovych konfiguracnich souboru pouzivam oblibene
\begtt...\endtt. Konecne pro obrazky mam makro \obr.


--------------------- xmlout.tex ------------------------------

\def\dil #1 \par{\ifnum\kapnum=0 \else \out {</chapter>}\fi
   \out{^^J<chapter o-num="\the\dilnum" level="1" type="TEXT"
o-num-display="YES">#1</chapter>}\kapnum=0 }
\def\oo #1. {}
\def\enddil{}

\def\kap #1 \par{%
    \ifnum\kapnum=0 \else \out {</chapter>^^J}\fi
    \advance\kapnum by1
    \out{<chapter o-num="\the\kapnum" level="2"
          c-date="2003-09-01" m-date="2003-09-26" type="TEXT"
          o-num-display="YES">^^J
          <title>#1</title>}}
\def\okraj #1{\out{ <p-title>#1</p-title>}}
\def\beginpar #1 \par{\out{ \space<p alignment="JUSTIFY">#1</p>}\par}

\def\begtt{\out{ <block type="PRE">}\bgroup
    \endlinechar=`^^X
    \def\beginpar ##1^^X{\out{ \space<p alignment="LEFT">##1</p>}\par}
}
\def\endtt^^X{\egroup\out{ </block>}}

\def\obr #1[#2]#3{\out{ <illustration><graphic
src="#2"/><title>#3</title></illustration>}}

{\catcode`\%=12 \gdef\%{%}}
{\catcode`\_=12 \gdef\_{_}}
{\catcode`\~=12 \gdef\char`\~{~}}
{\catcode`\&=12 \gdef\ent#1{}}
\def~{\ent{nbsp}}
\def\,{\ent{thinsp}}
\def\uv#1{\ent{ldquor}#1\ent{rdquor}}

\def\hbox#1{#1}
\def\dots{...}
\def\${$}
\def\cmd#1{<cmd>#1</cmd>}
\def\bf#1{<b>#1</b>}
\def\it#1{<it>#1</it>}
\def\-{}
\def\TeX{TeX}
\def\/{}

\newwrite\fout
\immediate\openout\fout=ver4out.xml
\def\out{\immediate\write\fout}

\newlinechar=`^^J
\out {<?xml version="1.0" encoding="iso-8859-2"?>}
\out {<!DOCTYPE rwtext SYSTEM "rw-text-xml.dtd">}
\out {<rwtext>}
\out { <rw-meta code="cz_onlinux">}
\out { \space <pub-title>\texttitle</pub-title>}
\out { \space <iss-date day="\the\day" month="\the\month"
year="\the\year">%
       \the\day.\the\month.\the\year</iss-date>}
\out { </rw-meta>}
\def\bye {\out{</chapter>^^J</rwtext>}\end}

\everypar={\beginpar}
\def\plainoutput{\shipout\box255} %% ignorujeme zbytky vystupu do dvi

---------------------------------------------------------------------

Svym prispevkem jsem chtel ukazat, ze lze primarni informaci
o dokumentu udrzet v plainTeXovem zdrojaku, zvlaste pokud se jedna
o dobre znackovany dokument napr. o pocitacich bez matematickych
vzorecku.

Pripoustim, ze pokud by dokument obsahoval matematiku, byla by
konverze obtizna. Vystup do MathML by snad byl mozny za pouziti Omegy
(pry neco takoveho umi) nebo modifikaci TeXu tak, aby se
vyuzila konverze na urovni math-listu, ktery je nejvice podobny
pozadovanemu MathML. Zatim jsem tyto experimenty nedelal a zajimalo by
me, jak konverzi dokumentu z TeXu s matematikou do HTML / XML
resili jini uzivatele. Myslim si, ze v tomto pripade ani
standardizovane znackovani z LaTeXu moc nepomuze.

----------

On Thu, 4 Mar 2004, Zdenek Wagner wrote:

> 1. Autor uz od pocatku kompletni text vklada do specialnich maker, u nichz
> zmeni definici podle toho, zda bude vytvaret normalni DVI, nebo pomoci
> \write HTML. Vse se programuje primo v (La)TeXu s minimem externich
> nastroju

To je presne to, co jsem udelal.

> Mnohem jednodussi je, kdyz se puvodni zdroj napise v XML.

S tim si nejsem tak docela jist. Jak kdy.

Zdravim

Petr Olsak




More information about the csTeX mailing list