Comando per creare comandi

  • Creatore
    Topic
  • #16247
    Up
    0
    Down
    ::


    Esiste un modo per creare un comando di creazione di comani? Mi spiego.

    Mettiamo che io crei questo comano \newcommand, deve accettare un parametro che fungerà da nome di un secondo comando. Se per esempio faccio
    `\newccomand{prova}{altro parametro}`
    questa cosa deve creare un comando
    `\prova{veramente}`
    che visualizza qualcosa del tipo: veramente altro parametro.

    Non so se mi sono spiegato, scusate se sono stato confuso. Si può fare?

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #16248
      DMW
        Up
        0
        Down
        ::

        Esiste un modo per creare un comando di creazione di comani? Mi spiego.

        Mettiamo che io crei questo comano \newcommand, deve accettare un parametro che fungerà da nome di un secondo comando. Se per esempio faccio
        `\newccomand{prova}{altro parametro}`
        questa cosa deve creare un comando
        `\prova{veramente}`
        che visualizza qualcosa del tipo: veramente altro parametro.

        Non so se mi sono spiegato, scusate se sono stato confuso. Si può fare?

        Devi aggiungere un parametro:
        `
        \newcommand{\prova}[1]{#1 altro parametro}
        …..
        \prova{veramente}
        `

        Ciao

        Andrea

      • #16249
        Up
        0
        Down
        ::


        Vabbè, questo lo so fare, non è quello che cercavo. A me serve un comando per creare altri comandi.

        `\crea{Prova}{altro parametro}`
        Questo comando crea (che è quello che serve a me deve creare un comando \Prova che può essere usato così:
        `\Prova{AAA}`

        Mi serve perché devo creare una famiglia di comandi collegati, e il comando
        `\Prova{AAA}`
        deve restituire
        `AAA altro parametro \ComandoStandard`
        dove \ComandoStandard è un comando definito in precedenza, e mi serve a caratterizzare questa famiglia di comandi.[/quote]

      • #16250
        Up
        0
        Down
        ::

        Vabbè, questo lo so fare, non è quello che cercavo. A me serve un comando per creare altri comandi.

        `\crea{Prova}{altro parametro}`
        Questo comando crea (che è quello che serve a me deve creare un comando \Prova che può essere usato così:
        `\Prova{AAA}`

        Mi serve perché devo creare una famiglia di comandi collegati, e il comando
        `\Prova{AAA}`
        deve restituire
        `AAA altro parametro \ComandoStandard`
        dove \ComandoStandard è un comando definito in precedenza, e mi serve a caratterizzare questa famiglia di comandi.

        `\newcommand{\crea}[2]{\newcommand{#1}[1]{##1 #2 \ComandoStandard}}`
        Lo userai con
        `\crea{\Prova}{altro parametro}`
        Come vedi, puoi usare \newcommand dentro un \newcommand, purché si indichino i parametri del \newcommand interno raddoppiando i #.

        Ciao
        Enrico

      • #16251
        Up
        0
        Down
        ::

        Come vedi, puoi usare \newcommand dentro un \newcommand, purché si indichino i parametri del \newcommand interno raddoppiando i #.

        Prima di tutto ti ringrazio. Un’iltima cosa:
        sarebbe possibile fare in modo da poter chiamare: \crea{Prova} e fra creare il comando \Prova?

        Perché in effetti il comando \crea{} dovrebbe creare due comandi, uno \Prova e anche \BisProva (che devono essere leggermente differenti).

        Grazie ancora.

      • #16252
        Up
        0
        Down
        ::

        Come vedi, puoi usare \newcommand dentro un \newcommand, purché si indichino i parametri del \newcommand interno raddoppiando i #.

        Prima di tutto ti ringrazio. Un’iltima cosa:
        sarebbe possibile fare in modo da poter chiamare: \crea{Prova} e fra creare il comando \Prova?

        Perché in effetti il comando \crea{} dovrebbe creare due comandi, uno \Prova e anche \BisProva (che devono essere leggermente differenti).

        Naturalmente.
        `\newcommand{\crea}[2]{%
        \expandafter\newcommand\csname #1\endcsname[1]{##1 #2 \ComandoStandard}%
        \expandafter\newcommand\csname Bis#1\endcsname[1]{##1 #2 \ComandoStandard}%
        }`
        Scrivere \csname Prova\endcsname è (quasi) equivalente a scrivere \Prova. Se però scrivessi \newcommand\csname #1\endcsname, otterrei l’effetto di dare \csname come argomento di \newcommand, che sarebbe molto sbagliato.

        Qui entra \expandafter, che espande il token successivo a \newcommand; l’espansione di \csname consiste nel cercare \endcsname e costruire il nome del comando con ciò che sta in mezzo. Et voilà.

        Va osservato che \newcommand è costruito in modo da “accorgersi” di essere chiamato all’interno di una definizione. Ci sono sottili questioni TeXniche di mezzo. Una sintassi Plain, che però non eseguirebbe il controllo sui comandi eventualmente già definiti, sarebbe
        `\def\crea#1#2{%
        \expandafter\def\csname #1\endcsname##1{##1 #2 \ComandoStandard}%
        \expandafter\def\csname Bis#1\endcsname##1{##1 #2 \ComandoStandard}%
        }`
        con il raddoppio dei segni # per indicare i parametri nella definizione “interna”.

        Ciao
        Enrico

      • #16253
        Up
        0
        Down
        ::


        Grazie 1000!!! Funziona alla perfezione!!!

    Visualizzazione 5 filoni di risposte
    • Devi essere connesso per rispondere a questo topic.

    Go to top