Newsgroup: it.comp.software.tex
Titolo: \newcommand

Potreste spiegarmi come funziona il comando \newcommand? Non parto da 
zero e qualcosa ho capito, ad esempio il fatto che la definizione dei 
parametri da usare vada indicata con [npar] nella definizione etc. La mia 
curiosità consiste invece nel capire come realizzare le caratteristiche 
opzionali del mio programma, come ad esempio quando si usa \table[||], 
come posso implementare il fatto che se c'è [||] allora devo svolgere un 
determinato compito?
-- 
Mattia

 scrive:

Non ho mai visto usare \table[||], se devo essere sincero.
Forse è meglio se cerchi di dire che cosa vorresti ottenere. I modi
per trattare un argomento opzionale sono molti.
Ciao
Enrico



Ok, si non mi sono spiegato molto bene, forse è meglio evitare di 
comunicare qualcosa alle 23 di sera dopo essere in piedi dalle 6 di 
mattina...
Ecco cosa sto facendo:
Ho creato un semplice template per il componimento del curriculum vitae. 
Per farlo ho definito un nuovo ambiente, con \newenvironment e l'ho 
chiamato simplecv. All'interno di \newenvironment ho ridefinito la 
tabella che volevo utilizzare, con \begin{tabular} e \end{tabular}. Ho 
poi creato dei nuovi comandi, come \newcommand{\cvemail}[1]{E-mail & \href
{mailto:#1}{#1}\tabularnewline} per la gestione dei vari campi impiegati 
nel curriculum vitae. Per richiamare il tutto ovviamente uso \begin
{simplecv}, poi metto i nuovi comandi, e.g \
cvemail{e-m...@e-mail.com
} 
infine chiudo il tutto con \end{simplecv}
Ora, vorrei una piccola aggiunta a quanto fatto sinora, ovvero avere la 
possibilità di aggiungere l'opzione della lingua per la definizione del 
cv. Vorrei usare ad esempio \begin{simplecv}[it], i comandi di 
conseguenza produrranno l'output in italiano o quant'altro. Uso laTeX da 
un po' ormai, ma più che altro per la scrittura di articoli. E' da poco 
che mi sono cimentato nella ridefinizione dei comandi e non è che ne 
sappia molte, un aiuto non sarebbe male!
-- 
Mattia

 scrive:

Più semplice scrivere direttamente "italian":
\newenviroment{simplecv}[1][english]
  {\selectlanguage{#1}<il resto della tua definizione>}{...}
Come secondo argomento opzionale dell'ambiente metti il valore che
desideri se non ne viene specificato uno dopo \begin{simplecv}.
Naturalmente dovrai caricare babel con le opzioni necessarie. Se
hai parole chiave da usare nelle varie lingue, puoi fare così: nel
preambolo, dopo aver caricato babel, scrivi
\newcommand{\Email}{}
\newcommand{\Address}{}
\addto\captionsenglish{%
  \renewcommand{\Email}{email}%
  \renewcommand{\Address}{address}%
}
\addto\captionsitalian{%
  \renewcommand{\Email}{posta elettronica}%
  \renewcommand{\Address}{indirizzo}%
}
Puoi aggiungere ciò che vuoi; nelle varie parti del testo userai
i comandi invece delle parole chiave esplicite.
Ciao
Enrico



Ottimo, un'ultima cosa, all'interno di \newenvironment ora definirò 
diversi comandi in base alla lingua che volgio, ho però capito si debba 
usare ##1 e non #1, sai perchè?
-- 
Mattia

 usare ##1 e non #1, sai perchè?
Certo che lo so! :-)
\newenvironment{simplecv}[1][english]
  {\selectlanguage{#1}%
   ...
   \renewcommand{\email}[1]{mailto: ##1}%
   ...
  }
  {...}
Se nella definizione di \email ci fosse solo #1, questo si riferirebbe
all'argomento di \begin{simplecv} (quello opzionale, in questo caso).
Con il raddoppio dei # puoi riferirti agli argomenti del comando 
"interno".
Ti consiglio di non definire le macro ausiliarie dentro alla 
definizione di simplecv, ma di usare il meccanismo di babel:
\addto\extrasenglish{...}
\addto\extrasitalian{...}
Qui puoi definire le tue macro, senza bisogno di raddoppiare #.
Se lo fai dentro la definizione di simplecv, devi usare troppe
divisioni in casi, non vale la pena.
Ciao
Enrico