[cstex] Makra pro práci s textovými řetězci ("připojování" textu)

Jaroslav Hajtmar hajtmar at gyza.cz
Tue Jun 30 12:19:01 CEST 2015


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




More information about the csTeX mailing list