Re: index — ridefinire un comando semplificato

#33329
Up
0
Down
::

Buongiorno a tutti.

Seguendo gli esempi qui presentati, ho ricreato un comando con due argomenti, di cui uno opzionale:

`
\documentclass[a4paper,italian]{book}
\usepackage[latin1]{inputenc}
\usepackage{babel}

\makeatletter
\newcommand{\dub}[2][]{
\def\@temp{#1}
\ifx\@temp\@empty
\textbf{#2}
\else
\emph{#1–#2}
\fi
}
\makeatother

\begin{document}
\dub[a{]} b{]} c{]} \dots]{d}
\end{document}
`

Se il primo argomento, come in questo caso, contiene alcune parentesi quadre (chiuse),
per non creare ambiguità con quella che delimita la fine dell’argomento stesso, devo inserirle tra due parentesi graffe.
Per ragioni di semplicità e di chiarezza, vorrei inserirle direttamente nel testo senza ricorrere ad altri simboli.
Una possibile alternativa credo sia quella di ridefinire il comando \dub in modo da accettare due parametri (questa volta entrambi obbligatori), di cui uno eventualmente vuoto:
`
\newcommand{\dub}[2]{
\def\@temp{#1}
\ifx\@temp\@empty
\textbf{#2}
\else
\emph{#1–#2}
\fi
}
`
ed utilizzarlo in questo modo:
`
\dub{a] b] c]}{d}
`
anche se nascono alcuni problemi di consistenza nel caso in cui il secondo argomento risulti vuoto.
Sapreste indicarmi se esiste un modo più agevole?

Vi ringrazio per la cortese attenzione.

Puoi più semplicemente scrivere \dub[{a] b] c] \dots}]{d}

Oppure usare come argomento di delimitazione dell’argomento opzionale qualcos’altro, ma occorre farlo a mano:
`\makeatletter
\def\dub{\@ifnextchar<\@dub{\@dub<>}}
\def\@dub<#1>#2{%
\def\@temp{#1}%
\ifx\@temp\@empty
\textbf{#2}%
\else
\emph{#1–#2}%
\fi
}
\makeatother`
e dovrai scrivere \dub{xyz}. Naturalmente usando <> anche se l’argomento opzionale non contiene parentesi quadre.

Occhio ai % quando scrivi le definizioni: le tue aggiungono parecchi spazi spuri.

Ciao
Enrico

Go to top