[cstex] Plainovska makra s ConTeXtem ??

Jakub Šťastný knava.bestvinensis at gmail.com
Thu Mar 15 09:29:04 CET 2007


Jaktoze nezna? ConTeXt jsou makra postavena nad plainem, takze toto mne
prekvapilo. Jinak mam take dojem, ze makra v ConTeXtu jsou nejaka podivna.
Bohuzel ono makra v TeXu, co se ladeni tyce, je opravdu neco silenyho,
alespon pro mne jako programatora.

Nicmene pojmenovavat ruzne se daji, teda alespon makra stylu \chapter a spol
urcite bez problemu, coz jsem i pouzil, kdyz jsem s ConTeXtem zacinal a
neumel spravne nasetupovat vzhled nadpisu :D

A pripojuji se k chvale na makra pana Olsaka, opravdu skvela prace, dekujeme
:) !

S krasnym jarnim pozdravem, J



2007/3/15, Jaroslav Hajtmar <hajtmar at gyza.cz>:
>
> Diky za odpoved.
> Zkusil jsem v makru, ktere pouzivam prejmenovat co se da ... bohuzel bez
> valneho vysledku.
>
> Hlavni problem je v tom, ze se jedna o makro, ktere neni me vlastni -
> napsal jej pan Olsak a urcite neni pro mne elementarni jej pochopit. Tim
> chci naznacit, ze pouzivam uz asi dva roky v plainu "blackbox"
> scancsv.tex pana Olsaka v plainu k me naramne spokojenosti.
>
> BTW: Myslim, ze v dnesni dobe pouzivani Excelovskych tabulek s daty je
> prave makro scancsv.tex pana Olsaka to prave, co umoznuje delat v plainu
> jakysi "mailmerge". V plainu jsem s timto makrem udelal uz velkou
> spoustu veci a bezne pomoci nej resim napr. hromadnou korespondenci pri
> prijimacich zkouskach a ruznych testech atd. Uvadim to jen proto, abych
> mu udelal dobrou reklamu a nalakal pripadne zajemce o tuto zalezitost :-).
> Zajemci si mohou toto makro stahnout z ftp serveru pana Olsaka
> ftp://math.feld.cvut.cz/pub/olsak/makra/ .
>
> Ja mam v teto chvili eminentni zajem zkusit pouzivat ConTeXt (vzhledem k
> jeho formatovacim schopnostem) prave s timto makrem, coz by mi dalo do
> rukou neskutecne mocny nastroj (i kdyz pro mne bohuzel porad jeste
> blackbox).
>
> Bohuzel makro scancsv.tex ve spojeni s ConTeXtem bohuzel nefunguje. Pan
> Olsak mi uz soukrome poradil a tim pomohl odhalit prvni problem tj. ze
> jeho makro vola plainovske makro \dospecials, ktere ConTeXt nezna.
> Poradil mi prevzit definici makra \dospecials ze souboru plain.tex. Tam
> je makro \dospecials definovano takto :
>
> \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
> \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
>
> Pote co jsem to udelal, tak se chybova hlaska zmenila na jinou hlasku :
>
> ! Missing \endcsname inserted.
> <to be read again>
> \relax
> \runheader ...xpandafter \ifx \csname e:\itemdata
> \endcsname \relax \expanda...
>
> \scanfirstline #1^^X->\scanheader #1;
> ^^X
> \scanbase ...r \scanfirstline \input #1 \relax ^^X
> \endhook \endgroup
> l.19 \scanbase zamestnanci.csv^^M
>
> ?
>
> Cele makro pana Olsaka je asi na 150 radcich a nechci ho posilat (viz.
> ftp://math.feld.cvut.cz/pub/olsak/makra/), ale pokud by nekdo byl
> ochoten se tim zabyvat a navic byl schopen pochopit z hlasky v cem je
> problem, posilam svuj ConTeXtovy osekany zdrojak, cast makra ve ktere
> asi dojde k chybe a pak popis funkce makra, tak jak to popisuje pan
> Olsak. Moc by mi pomohlo, kdyby se nekomu podarilo prijit na to, v cem
> je jadro pudla.
>
> Mnohokrat dekuji za pripadne rady a omlouvam se za asi dost specificky
> dotaz.
> S pozdravem Jaroslav Hajtmar
>
>
> Nasleduji popisovane prilohy:
>
> % Muj zdrojak :
> \setupoutput[pdftex] % Určuje výstup ConTeXtu.
> \enableregime[cp1250] % Kódování.
> \mainlanguage[cz] % Podle typografických pravidel
>
> \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
> \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
>
> \input scancsv
> \def\printaction{\e[jmeno]}
> \def\lineaction{\printaction}
> \starttext
> \scanbase zamestnanci.csv
> \stoptext
>
> % obsah souboru zamestnanci.csv (oddelovac pro csv je strednik ):
> pc;jmeno
> 1.;Barton Jan
> 2.;Bila Vera
> 3.;Bokova Helena
> 4.;Brozova Marie
>
>
>
> % nasleduje cast makra pana Olsaka :
>
> \def\scanbase #1 {\begingroup \endlinechar=`\^^X
> \edef\maskauvo{\obklopeni####1\obklopeni\separator}
> \edef\maskaneuvo{####1\separator}
> \expandafter\def \expandafter\maskheader \maskauvo
> {\def\itemdata{##1}\runheader}
> \expandafter\def \expandafter\nomaskheader \maskaneuvo
> {\def\itemdata{##1}\runheader}
> \expandafter\def \expandafter\maskitem \maskauvo
> {\def\itemdata{##1}\runitem}
> \expandafter\def \expandafter\nomaskitem \maskaneuvo
> {\def\itemdata{##1}\runitem}
> \edef\scanfirstline ##1^^X{\noexpand\scanheader##1\separator\noexpand^^X}
> \def\do##1{\catcode`##1=12 }\dospecials
> \catcode`\ =10 \beginhook
> \expandafter \scanfirstline \input #1 \relax^^X\endhook \endgroup}
>
>
> % a konecne popis funkce makra :
>
> % scancsv. tex
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> % 26. 2. 2005 Petr Olsak
>
> % Makro na zpracovani databasovych vystupu ve formatu CSV pro plain.
> %
> % Srovnejte tez makro scanbase.tex
> %
> % Nacitane soubory se predpokladaji ve tvaru:
> %
> % "zahlavi1";"zahlavi2";"zahlavi3"; ... "zahlavi-n"
> % "text 1,1";"text 1,2";"text 1,3"; ... "text 1,n"
> % "text 2,1";"text 2,2";"text 2,3"; ... "text 2,n"
> % "text 3,1";"text 3,2";"text 3,3"; ... "text 3,n"
> % ...
> %
> % Na takovy soubor je mozno po
> %
> % \input scancsv.tex
> %
> % aplikovat makro \scanbase takto:
> %
> % \scanbase soubor
> %
> % Obklopujici znak " muze u libovolneho zahlavi nebo polozky
> % chybet. Tj. je korektni treba i takovy zapis dat:
> %
> % "jmeno";"prijmeni";cislo;RC
> % "Ferdinand";"Mravenec";1;000111/2244
> % "Josef";"Vykutal";2;444333/2211
> %
> % Makro nacte zahlavi a zacne cist jednotlive radky. Po precteni
> % kazdeho radku je obsah polozky pripraven v expanznim makru
> % \e. Presneji \e[zahlavi] expanduje na text odpovidajici polozky.
> % V teto situaci \scanbase spusti makro \lineaction, ktere si muze
> % uzivatel definovat jak chce.
> %
> % Po ukonceni makra \lineaction cte scanbase dalsi radek tabulky, naplni
> % znovu expanzni makra \e texty polozek z tohoto radku a spusti znovu
> % \lineaction. To se opakuje tak dlouho, dokud neni ukonceno cteni
> % tabulky. Navic je makru \lineaction k dispozici registr \numline
> % obsahujici cislo prave precteneho radku.
> %
> % Priklad pouziti:
> %
> % \input scancsv
> %
> % \newcount \mylines
> % \def\bb #1 #2/{\hbox to#1{#2\hss}}
> %
> % \def\printaction{\global\advance\mylines by1 %% \scanabase pracuje
> % \hbox{% %% uvnitr skupiny!
> % \bb 2em \the\numline./
> % \bb 26em \e[nazev]/
> % \bb 10em \e[prijmeni] \e[jmeno]/
> % \bb 3em \hfill\e[kc2002]/
> % \bb 3em \hfill\e[kc2001]/}
> % }
> % \def\lineaction{\if K\e[typ_clenstvi]% Kolektivni clenove
> % \printaction
> % \else \if G\e[typ_clenstvi]% Gymnazia
> % \printaction
> % \fi\fi % tisknu jen kolektivni cleny a gymnazia
> % }
> % \scanbase database1
> % \scanbase database2
> % {\it Number of printed lines: \the\mylines}.
> % \end
> %
> % Pokud neni uzivatelem definovano makro \lineaction, pouzije
> % scanbase sve vlastni (defaultni) makro, ktere vytiskne vsechny polozky
> % jednoho radku do odstavce ve velmi zhustenem tvaru (vyzkousejte si).
> %
> % Kazde \scanbase vstupuje do skupiny, pak spusti \beginhook,
> % pak cte hlavicku a jednotlive radky, jak bylo receno vyse,
> % pak spusti \endhook a nakonec vyleze ze skupiny.
> % Sekvence \beginhook a \endhook muze predefinovat uzivatel, defaltne maji
> % hodnotu \relax
> %
> % Uzivatel muze po nacteni \input scanbase predefinovat makra \separator
> % a \obklopeni (viz nize), pokud jsou v datech polozky a zahlavi
> % oddeleny jinymi znaky nez strednik a symbol palce.
>
>
>
>
>
> Josef Polách napsal(a):
> > Jaroslav Hajtmar napsal(a):
> >
> >> Potreboval bych zjistit do jake miry je ConTeXt "tolerantni" k externim
> >> plainovskym makrum (nacitanym pomoci \input). Predpokladam, ze to asi
> >>
> >
> > Ani tady zr(ejme( nezáleží, jsou-li makra nac(ítána jako input
> > nebo umíste(na ve stejném souboru jako ostatní zdroj.
> >
> >
> >> "zchroustne", ale pri pouziti slozitejsich maker mi ConTeXt neustale
> >> hlasi nejake chyby. Muzete mi prosim poradit na co je treba si dat
> pozor
> >>
> >
> > Jaké chyby? Podle chybových hlášek by se to me(lo dát poznat.
> >
> >
> >> pripadne v cem muze byt problem pri pouzivani plainovskych maker s
> >> ConTeXtem?
> >>
> >
> > Možná v robustnosti/kr(ehkosti. Ale zatím ConTeXt moc neznám.
> > Napadá me( po zkušenostech s LaTeXem: Nepojmenovávat svá
> > makra stejne(, jako existující ConTeXtová, mohl by vypuknout
> > zmatek a pr(ekvapení. Taky je potr(eba ohlídat si registry, co
> > se kam ukládá... Každá pr(edpr(ipravená nadstavba skýtá
> > nepohodlnost vlastních úprav.
> >
> >
> >> Diky. Jarda Hajtmar
> >>
> >
> > Za nepatrne( málo. Patr(í se hrabat v te(ch chybových hláškách.
> > Tr(eba více napoví ostatní...
> >
> > Pohoda, hezký den
> >
> >
> >
> >
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>



-- 
Se srdečným pozdravem Jakub Šťastný

Prosím neposílejte mi přílohy ve formátech doc, ppt, pps, wmv a podobně.
Existuje spoustu kvalitních svobodných alternativ, které se (narozdíl od
zmíněných) řídí standardy. Například OASIS standard pro psaní
strukturovaných, textových dokumentů je formát odt. Děkuji.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20070315/613a74f5/attachment-0003.html>


More information about the csTeX mailing list