Newsgroup: it.comp.software.tex
Titolo: Parametri in /newenvironment

Sto approntando un nuovo ambiente di questo genere (perdonate le
virgolette "sbagliate", ho problemi di tastiera da remoto):
\newenvironment{\citazione}[1]
{''\begin{em}}
{\end{em}''#1}
ma LaTeX protesta perchè vorrei usare il parametro alla fine dell'ambiente:
se lo metto, per dire, dal \begin{em} tutto funziona. Perdonate se non
posto l'output ma da qua non posso... Any idea del perchè non funziona come
ho fatto? Il parametro dovrebbe ospitare un \footnote, che può esserci o
meno.
Grazie a chi mi da una mano, grazie anche agli altri per sopportarmi! :-D
Franco
-- 
Tanto più estendo l'isola della mia conoscenza,
quanto più scopro aumentare la linea costiera della mia ignoranza.

 meno.
\newcommand{\citazionefoot}{}
\newenvironment{citazione}[1]
  {\renewcommand{\citazionefoot}{#1}%
   \lq\lq\begingroup\em}
  {\endgroup\rq\rq\citazionefoot}
L'idea è di definire all'inizio dell'ambiente un comando che contenga
il tuo parametro, da usare alla fine. Lo definisco come vuoto prima
per poter usare poi \renewcommand.
Non esiste un ambiente "em" e non è bene usare quella costruzione. 
Adesso sai come evitare le "graffe non bilanciate".
Nella definizione puoi certamente sostituire \lq\lq con `` e
\rq\rq con ''. Adesso sai come fare quando ti trovi con una tastiera
sbagliata.
Ultima osservazione, ma era sicuramente un errore di stampa:
il primo argomento di \newenvironment non è un comando, ma
una successione di caratteri.
Ciao
Enrico

 una successione di caratteri.
Svista mia... me lo scusino...


 cosa sono le "graffe non bilanciate"?
Un tentativo di scrivere
\newenvironment{myem}{\emph{}{}}
non può funzionare perché le graffe in quel contesto servono a
delimitare gli argomenti di \newenvironment. Non funzionerebbe nemmeno
\newenvironment{myem}{{\em}{}}
dove si cercherebbe di confinare l'effetto della dichiarazione \em in un
gruppo. Di fatto una definizione "migliore" per il tuo ambiente sarebbe
\newenvironment{citazione}[1][]
  {\renewcommand{\citazionefoot}{#1}\normalfont``\em}
  {\normalfont''\citazionefoot}}
In questo modo sei sicuro che gli elementi dell'ambiente sono composti
con i caratteri giusti indipendentemente da condizioni esterne. Il 
secondo argomento opzionale a \newenvironment ha la conseguenza che
devi scrivere
\begin{citazione}[\footnote{Pippo}]
Le mie noccioline sono buone.
\end{citazione}
se metti la nota alla citazione; se invece non ne hai, puoi scrivere
\begin{citazione}
Datemi un punto di appoggio e solleverò il mondo.
\end{citazione}
Ciao
Enrico

 carichi usa un comando con quel nome.
Va beh... però così facendo di fatto ALLA FINE rinomini il comando ed 
annulli il precedente. Non è poi molta la differenza... l'unico 
vantaggio (grosso vantaggio effettivamente...) è che hai la certezza del 
codice, senza comandi di cui tu non abbia il pieno controllo. Insomma, 
continuo a preferire vagamente il comando \def che presuppone la 
conoscenza "approfondita" dei pacchetti e l'utilizzo "composto" dei vari 
comandi. \newcommand è un potente strumento che può esploderti tra le 
mani... ti ricordi il peek ed il poke del linguaggio basik (accesso 
diretto alla memoria) definito scorretto nei confronti del sistema 
operativo? ...un comando impensabile in *nix!
Ciao,

confronti del sistema operativo? ...un comando impensabile in *nix!
Trovo che, nell'inferno di un linguaggio macro, non approfittare del pur
modesto strumento che permette un minimo di incapsulamento sia un atto di
pura incoscienza (se non di imperdonabile hybris, se mosso, come dici,
dalla presunzione di avere una conoscenza "approfondita" del "texiverso",
cosa al di là delle possibilità umane).
E', purtroppo, impossibile fare del tutto a meno di \def, che è alla fine
IL comando di definizione di TeX, su cui necessariamente si basano
\newcommand e tutti gli altri. Appena però è possibile usare qualcosa di
più strutturato, e più sicuro (proprio perché scoppia, invece di
avvinghiarti in inestricabili e indistruttibili grovigli di legami), è a
mio avviso opportuno farlo.
Ciao.

 operativo? ...un comando impensabile in *nix!
Č \def che ti puň scoppiare fra le mani; \newcommand č stato definito
appositamente per evitare certi rischi. Analizziamo perň meglio.
Il problema č di usare l'argomento dato a \begin{ambiente} nella
quando si esegue \end{ambiente}. Il trucco, all'osso, č
\newenvironment{ambiente}[1]
  {\def\tempambiente{#1}<altro 1>}
  {<altro 2>\tempambiente<altro 3>}
dove con <altro n> indico le cose che si vogliono fare all'inizio e
alla fine di "ambiente".
Perché usare allora
\newcommand{\tempambiente}{}
\newenvironment{ambiente}[1]
  {\renewcommand{\tempambiente}{#1}<altro 1>}
  {<altro 2>\tempambiente<altro 3>}
che sembra un'inutile sovrappiů?
Il primo comando ti garantisce (quasi) che \tempambiente non č usato
da altri pacchetti che carichi, perché verrebbe emesso un messaggio
di errore o al momento di eseguirlo o caricando il pacchetto.
Con \def questo non avverrebbe.
Il "quasi" viene dall'esistenza di \providecommand, ma il discorso
si allungherebbe troppo.
Ciao
Enrico

 Con \def questo non avverrebbe.
...mi hai convinto. Quando capita allora vado a convertire il codice e 
ti saprò dire, ma ci vorrà tempo. Io sono un tester prezioso, perché uso 
pacchetti delicatissimi (tipo il makor2): se scoppia qualche casino, lui 
è sempre il primo. Oltretutto non uso nemmeno latex, ma lambda (altra 
rogna...).
Ciao e grazie,

 \end{citazione}
Porta pazienza, ma già che sei così disponibile ti "sfrutto" per capire...
le parentesi. Continua a sfuggirmi il significato delle parentesi. Io mi
ero preso il mio bel LaTeX companion per rinfrescarmi l'uso di
\newenvironment, e non faceva riferimento all'uso di due parentesi quadre,
e come se non bastasse vengono sostituite da graffe nell'uso dell'ambiente
definito, ovvero io scrivo 
\begin{citazione}{\footnote{Pippo}}
Le mie noccioline sono buone.
\end{citazione}
Se invece non devo mettere la footnote e provo a scrivere
\begin{citazione}
Datemi un punto di appoggio e solleverò il mondo.
\end{citazione}
quello che ottengo è
    atemi un punto di appoggio e solleverò il mondo.
ovvero mi mangia la D. Vedo una logica, in questo comportamento, e quindi ho
sostituito tutto in \begin{citazione}{}. La domanda a questo punto diventa:
perchè quel costrutto "[1][]" funziona? Cosa vuole effettivamente dire una
parentesi quadra?
Grazie per tutte le spiegazioni che mi stai dando...
      Franco


 scrive:

Una sintassi come \newenvironment{ambiente}[1][<testo>]{...}{...}
significa che stai definendo un ambiente con un argomento /opzionale/.
Lo stesso si può applicare a \newcommand e ci possono essere più 
argomenti. Ciò che sta fra la seconda coppia di parentesi quadre è
il parametro che viene usato quando l'argomento opzionale non è
indicato.
Per esempio, \sqrt ha un argomento opzionale e uno obbligatorio:
\sqrt{2} stampa la radice quadrata di due e \sqrt[3]{2} stampa
la radice cubica di due. Il comando sarebbe definito con
\newcommand{\sqrt}[2][]{...}
perché come indice della radice, nel caso non si specifichi niente,
non vogliamo niente. Supponi invece di avere un comando per scrivere
una parola in un carattere diverso; di solito corsivo, ma in altre
occasioni nero:
\newcommand{\parolaspeciale}[2][\textit]{#1{#2}}
Se scrivi \parolaspeciale{pippo}, la sostituzione darà come risultato
\textit{pippo}; se scrivi \parolaspeciale[\textbf]{pippo}, la
sostituzione sarà \textbf{pippo}.
Nel tuo caso, \newenvironment{citazione}[1]{...}{...}, il comando
\begin{citazione} /richiede/ un argomento che, nel caso di
\begin{citazione}
Datemi un punto di appoggio e solleverò il mondo.
\end{citazione}
è il carattere D. Invece con \begin{citazione}{} l'argomento è
vuoto e la "D" comparirà al posto giusto.
Viceversa, con \newenvironment{citazione}[1][]{...}{...}
stai specificando che \begin{citazione} ha un argomento opzionale,
quindi
\begin{citazione}
Datemi un punto di appoggio e solleverò il mondo.
\end{citazione}
funziona correttamente perché al parametro #1 nella definizione viene 
sostituito l'argomento di default (che è vuoto), così come
\begin{citazione}[\footnote{Pippo}]
Le mie noccioline sono buone.
\end{citazione}
dove al parametro #1 nella definizione viene sostituito 
"\footnote{Pippo}".
Ciao
Enrico