[cstex] Složené závorky v masce a separátorech parametrů maker

Jaroslav Hajtmar hajtmar at gyza.cz
Sat Jun 6 09:47:42 CEST 2020


Dobrý den všem v konfeře.
Rád bych se po dlouhé době zeptal na možná triviální otázku, nicméně jsem nic nedohledal ani v PDFkové verzi TBN, kterou jsem krátce rozkliknul…

Nejprve se v úvodu zeptám a v závěru pak vysvětlím svoji motivaci.

Otázka: Existuje možnost použít složené závorky v masce parametru makra, abych zároveň nepřišel o vyseparované parametry maker?

Uvedu příklad definice svého makra \InvMat. Upozorňuji, že se jedná o makro ConTeXtu, což má význam jen z hlediska toho, že makro \thematrix sází v ConTeXtu matici.

Např. \thematrix{{1, 2, 3}; {-1, 2, 1}} vysází dvouřádkovou matici se třemi sloupci.Tento příklad ukazuje, co vlastně chci.


 
Rád bych vytvořil makro:

\def\InvMat[{#1,#2}]{\thematrix{#1;#2}}

které by umožnilo vysázet velký počet dvouřádkových matic tak, aby oba parametry makra InvMat byly obsaženy v masce [{ …… }]. 
Na okraj dodávám, že  úmyslně píši velký počet, protože pokud by se jednalo o několik matic, tak bych to tímto způsobem vůbec nedělal… 


Příklad použití: 

\InvMat[{{1, 2, 3}; {-1, 2, 1}}] by mělo dát stejný výsledek jako \thematrix{{1, 2, 3}; {-1, 2, 1}}.

Na této variantě jsem si vylámal zuby, nicméně jsem schopen použít variantu (již v praxi použitelnou, nicméně trochu prudící):

\def\InvMat[\{#1,#2}\]{\thematrix{#1;#2}}  …. tj. s backslashem před úvodní a koncovou složenou závorkou. Toto makro mi funguje - volám jej takto:

\InvMat[\{{1, 2, 3}; {-1, 2, 1}\}]

To mne trochu obtěžuje, protože musím ty backslashe manuálně vkládat.

Neexistuje nějaká možnost (předpokládám, že ano a jak se znám je stupidní :-) … ), jak dosáhnout funkčního výsledku při definici makra \InvMat prvním způsobem, tj. 

\def\InvMat[{#1,#2}]{\thematrix{#1;#2}}



Díky za případné rady a pěkný den všem.
Jarda Hajtmar


PS1: Doufám, že jste všichni ve zdraví a při silném pracovním nasazení v rámci distanční výuky přežili dobíhající “koronaepidemónii” a přeji všem brzký návrat k (jak se zdá) “normáluizaci”...

PS2: Přidávám vysvětlení pozadí celé záležitosti a mé motivace pro ty, kterým leží v hlavě PROČ to chci zrovna tak pošahaně:

V CAS Mathematica mi funkce InvMat pro generování matic a k nim inverzních matic dává na vstupu/výstupu následující výstup:
In[149]:= InvMat[{{1, 0, 0}, {1, 2, 1}, {0, 1, 1}}]

		\InvMat[{{1,0,0},{-1,1,-1},{1,-1,2}}]

Out[149]= 2

Tento výstup ve finále vyexportuji ve tvaru, kde v 1. řádku volám svoji Mathematica funkci, ve 2. řádku je výsledná inverzní matice a ve 3. řádku je součet všech prvků výsledné matice:

InvMat[{{1, 0, 0}, {1, 2, 1}, {0, 1, 1}}] 		% vstupní volání mathematica funkce
\InvMat[{{1,0,0},{-1,1,-1},{1,-1,2}}]		% výstupní inverzní matice s prefixem pro ConTeXtovou sazbu	
2									% výstupní údaj - součet všech prvků inverzní matice (kvůli snazšímu opravování testů v Teams assignments)


Moje motivace je nyní taková, že chci použít tento zdrojový text generovaný v Mathematica pro vygenerování CSV tabulky, z níž pak z ConTeXtem pomocí dávkového zpracování vysázím zadání prověrky pro větší množství studentů tak, aby měl každý student naprosto jiné zadání a přitom byla snadná automatická kontrola výsledků pomocí součtu všech prvků v inverzní matici.

Pěkný den.
Jarda




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20200606/eff8ff92/attachment.htm>


More information about the csTeX mailing list