- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 21 anni, 4 mesi fa da .
-
Topic
-
Ciao,Ieri ho passato un po’ di tempo a cercare di imparare alcune cose su come si definiscono i comandi in “stile” ConTeXt. Spulciando nel codice (syst-gen.tex) e nello wiki credo di essere giunto ad un buon punto, ma ho ancora qualche perplessità.
Inizio dalla gestione degli argomenti “semplici”. Oltre alle varie macro \dosingleempty, \dodoubleempty, etc., ci sono anche \dosingleargument, \dodoubleargument, etc. per i casi nei quali non si vogliono argomenti opzionali, ma l’implementazione di queste macro usa le corrispondenti \do*empty, rendendole di fatto superflue (non fidandomi completamente della mia comprensione del codice, ho effettivamente provato ad usare \dosingleargument al posto di \dosingleempty, a non fornire alcun argomento all’atto dell’utilizzo della nuova macro ed a “tracciarne” l’esecuzione: non fa una piega). Mi chiedo se mi son perso in un bicchiere d’acqua oppure se nelle versioni successive di ConTeXt sia cambiato qualche cosa che ignoro.
Passando a \definestartstop, il secondo argomento può contenere le keyword before, after, style e commands, ma, consideratane l’implementazione (che usa \getparameters) anche qualunque altra cosa venga in mente all’utente. La manipolazione di questa lista di coppie chiave-valore usa un prefisso “strano” (\??be ) con uno spazio finale, che complica un po’ le cose, ma come ho fatto nell’esempio seguente, si può aggirare in qualche modo l’ostacolo (per ora ignoro l’esistenza di qualche cosa di simile a \@nameuse di LaTeX, quindi mi sono arrangiato nel modo tradizionale):
`\unprotect
\definestartstop[esperimento]
[saluto={Ciao a tutti}, commands=\MyEsperimento]
\def\MyEsperimento{%
\csname\??be esperimentosaluto\endcsname\crlf}
\protect\startesperimento Tutti\unknown\stopesperimento
\setupstartstop[esperimento][saluto={Non saluto nessuno}]
\startesperimento Tutti\unknown\stopesperimento`Il codice precedente, però, non permette di specificare argomenti opzionali/obbligatori per il blocco start/stop. Per quanto ho potuto vedere, Hagen ha scritto (quasi?) tutti i blocchi start/stop di ConTeXt che hanno argomenti “un pezzo alla volta”:
`\def\startbho{\bgroup\bho}
\def\bho{\dosingleargument\dobho}
\def\dobho[#1]{%
%…
}
\def\stopbho{\egroup}`Anche in questo caso ho il dubbio di essermi perso in un bicchiere d’acqua…
- Devi essere connesso per rispondere a questo topic.