[cstex] Makra pro práci s textovými řetězci ("připojování" textu)
Jan Sustek
Jan.Sustek at seznam.cz
Tue Jun 30 12:35:38 CEST 2015
Ahoj Jardo,
na první pohled nevidím, co se v těch konkrétních cyklech přesně děje. Ale
mohlo by pomoct expandované addto (napr. \eaddto), kdy se před přidáním do
seznamu ten přídavek úplně expanduje.
\long\def\eaddto#1#2{\edef#1{#1#2}}
Honza
---------- Původní zpráva ----------
Od: Jaroslav Hajtmar <hajtmar at gyza.cz>
Komu: cstex at cs.felk.cvut.cz
Datum: 30. 6. 2015 12:19:47
Předmět: Re: [cstex] Makra pro práci s textovými řetězci ("připojování"
textu)
"Dobrý den.
Díky pane Olšáku za užitečné řešení. Zatím jsem nic takového
nepotřeboval, ale teď se to mi to bude určitě hodit. Když příjde na věc,
tak dávám spíš přednost TeXovému řešení před Lua řešením, nicméně limity
mých TeXovým možností jsou mnohem níže než Luových, takže mi kolikrát
nezbyde nic jiného než to (někdy i zbytečně komplikovaně) obejít v Lua :-).
Ještě bych v tuto chvíli potřeboval poradit. Zkoušel jsem totiž s makrem
\addto experimentovat a když dělám i složitější případy (vkládané
řetězce jsou v makrech atd...) zdá se, že vše funguje, jak má.
Když ovšem nakonec vložím finálně do makra "\neklpredmety", tak bohužel
dojde někde k chybě.
\def\neklpredmety{%
\neklasifikovanyzakfalse
\def\NeklPredmety{}
\dostepwiserecurse{24}{58}{1}{\if\csvcell[\recurselevel,\linepointer]N
\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\recurselevel,0]},
}\neklasifikovanyzaktrue \fi}%
\dostepwiserecurse{75}{85}{1}{\if\csvcell[\recurselevel,\linepointer]N
\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\recurselevel,0]},
}\neklasifikovanyzaktrue \fi}%
}
Princip je snad zřejmý. Prohledat aktuální řádek a v něm nalézt znaky
"N", indikující neklasifikovaný předmět. Pokud najde aspoň jeden, tak
nastaví příznak na \neklasifikovanyzaktrue a přidá tento předmět do
seznamu neklasifikovaných. (Následně daného žáka vypíše s jeho všemi
neklasifikovanými předměty.)
Nenapadá Vás, prosím, kde je problém? Zdá se, že to zlobí až uvnitř
cyklu \dostepwiserecurse{from}{to}{step}{what to do}, kde se v makru
\recurselevel vyhodnocuje počet proběhlých cyklů.
V tuto chvíli nejsem schopen bohužel v plainu připravit (nepodařilo se
mi to zrealizovat) nějaký minimální příklad toho, kde se to zasekává,
nicméně dolů vkládám aspoň část kódu z něhož snad lze vyjít.
\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\def\NeklPredmety{}
\def\zkratkapredmetu#1{#1}
\def\csvcell[#1,#2]{Ch}
\def\row{1}
\def\column{3}
\addto{\NeklPredmety}{CjL, }
\addto{\NeklPredmety}{M, }
\addto{\NeklPredmety}{\zkratkapredmetu{\csvcell[\row,\column]}, }
column: \column
row: \row
csvcell: \csvcell[\row,\column]
\NeklPredmety
\bye
Díky za případnou radu.
Pěkný den přeje
Jarda Hajtmar
Dne 30. 6. 2015 v 6:09 Petr Olsak napsal(a):
>
> Dobrý den,
>
> s něčím podobným se musel setkat asi každý. V OPmac je na to
> připraveno makro \addto.
>
> V dotazu mícháte dvě věci dohromady: přidávání obsahu do makra
> (například pomocí \addto) a otázka návratu hodnoty, tj. užití makra.
>
> Může to vypadat třeba takto:
>
> \long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
> \long\def\jointocontent#1{\addto\mycontent{#1}\mycontent}
>
> \def\mycontent{} % inicializace
> \jointocontent{AAA} % vrátí AAA
> \jointocontent{BBB} % vrátí AAABBB
> \jointocontent{CCC} % vrátí AAABBBCCC
>
> \bye
>
>
>
> On Tue, 30 Jun 2015, Jaroslav Hajtmar wrote:
>
>> Dobrý den.
>>
>> Hledám nějaké TeXové řešení "zřetězování" maker. Jde mi o to, že
>> potřebuji v nějakém cyklu provádět test a v případě vyhovujícího
>> výsledku potřebuji připojit nějaký text k obsahu stávajícího makra.
>> Něco jako tohle:
>>
>> \def\jointocontent{} % inicializace
>> \jointocontent{AAA} % vrátí AAA
>> \jointocontent{BBB} % vrátí AAABBB
>> \jointocontent{CCC} % vrátí AAABBBCCC
>>
>>
>> Pokoušel jsem se najít nějaké řešení. Něco šlo najít pod hesly jako
>> concatenate atd... Něco jsem našel ale nic z toho nesplňovalo moje
>> představy. Jde to vůbec v principu nějak rozumně udělat? Opět avizuji
>> svůj osobní problém s vícenásobnou expanzí atd... :-)
>>
>> Upozorňuji na to, že pomocí Lua jde snadno udělat něco v tomto duchu:
>>
>> \savetomybuffer{} % inicializace
>> \addtomybuffer{AAAA} % připojení AAA
>> \addtomybuffer{BBB}
>> \addtomybuffer{CCC}
>>
>> \getcontentofmybuffer % vrátí AAABBBCCC,
>>
>> ale jde mi spíš o principiální řešení přímo na úrovni TeXu.
>>
>> Nepotkali jste se s něčím podobným?
>> Díky a jsem s pozdravem pěkného nadcházejícího dne.
>> Jarda Hajtmar
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> https://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>>
>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> https://lists.felk.cvut.cz/mailman/listinfo/cstex
_______________________________________________
csTeX mailing list
csTeX at cs.felk.cvut.cz
https://lists.felk.cvut.cz/mailman/listinfo/cstex"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20150630/1a0714a0/attachment-0003.html>
More information about the csTeX
mailing list