Re: Occultare un comando con parametri

#8776
Up
0
Down
::

Ciao ev.

[quote]Direi che il problema è risolto quasi del tutto; purtroppo ci sono ancora dei \clearpage (almeno credo che siano questi, dando una sbirciata in book.cls) di troppo.

Ridefinisci \chapter come ti ho suggerito e ricompila.

Ti chiedo scusa, non ho specificato che la presenza dei \clearpage di troppo si avverte nella soluzione proposta da egreg9, non nella tua. Il fatto è che la sua soluzione mi era parsa più semplice, comprensibile e ad alto livello e, per queste ragioni, alla fine avrei preferito usare una versione (leggermente modificata) della sua, senza nulla togliere alla tua, che risolve il mio problema alla perfezione.

Quindi, oltre alla prima distinzione che ho fatto (separare i problemi per \chapter e per \part), ne introduco qui un’altra: “soluzione egreg9” e “soluzione ev”. Per tutto questo mio messaggio mi concentrerò solo sulla “soluzione ev”, il cui corretto funzionamento si vede nel seguente esempio minimale:
`\documentclass{book}

\makeatletter
\def\chapter{\@ifstar\@gobble\@capitolo@farlocco}%
\newcommand*{\@capitolo@farlocco}[2][]{\relax}%
\makeatother

\begin{document}

\tableofcontents

\chapter[Titolo corto]{Titolo luuuuuuuungo}

Uno, uno, uno\dots

\chapter*{Titolo senza numero}

Due, due, due\dots

\end{document}`
Per dimostrare (solo a me stesso) di avere imparato qualcosa da tutti e due, modifico il tuo codice eliminando il \relax nella tua definizione
`\makeatletter
\def\chapter{\@ifstar\@gobble\@capitolo@farlocco}%
\newcommand*{\@capitolo@farlocco}[2][]{}%
\makeatother`
dal momento che mi viene detto che non sempre è corretto usarlo. Pare che non vi siano effetti collaterali.

mi potrebbe servire “azzerare” anche \part

Idem come sopra, ma te lo lascio come esercizio

Volentieri. Tenendo presente che non so cosa facciano ne’ \@ifstar (anche se immagino che abbia a che fare con la variante non numerata di un qualsiasi comando) ne’ \@gobble, e che non capisco perché nel nuovo comando che definisci compaia il carattere chiocciola (ma su questo non occorre rispondermi perché aprirò di sicuro un post dedicato all’argomento in futuro), andando ad intuito scriverei:
`\makeatletter
\def\part{\@ifstar\@gobble\@parte@farlocca}%
\newcommand*{\@parte@farlocca}[2][]{}%
\makeatother`
Se però applico questo codice ad un esempio minimale
`\documentclass{book}

\makeatletter
\def\part{\@ifstar\@gobble\@parte@farlocca}%
\newcommand*{\@parte@farlocca}[2][]{}%
\makeatother

\begin{document}

\tableofcontents

\part[Parte corta]{Parte luuuuuuuunga}

Uno, uno, uno\dots

\part*{Parte senza numero}

Due, due, due\dots

\end{document}`
mi accorgo che purtroppo, come già notato con la soluzione egreg9, compare il titolo dell’indice, cosa che non vorrei. Per il resto, tutto a posto.

sempre che non salti la mosca al naso anche a te al solo leggere la parola esercizio.

Al contrario, l’esercizio a me piace molto e ritengo che faccia bene, basta che si riesca ad arrivare a qualcosa di “costruttivo” 😉

Nel frattempo ho appena ordinato The LaTeX Companion, sperando che mi faccia luce in merito ai comandi misteriosi di cui sopra. Ora devo scappare, ma cercherò comunque più tardi in rete il loro significato.

P.S. se possibile, mi farebbe piacere cercare di sollevare da quei problemi anche la soluzione egreg9. Se invece (per chi ha un modello mentale perfetto di LaTeX) quella soluzione non era corretta o all’altezza (cosa di cui dubito, visto il personaggio 😉 come non detto.

P.P.S. ev scusami ancora se ti ho fatto sentire “in secondo piano”. Non era mia intenzione.
Ciao a tutti![/quote]Basta guardare il codice di book.cls e modificarlo alla buona.
`\makeatletter
\def\not@a@section{\@ifstar\@gobble\@gobbleopt}
% \def\not@a@section{\secdef\@gobbleopt\@gobble} %alternativa
\let\part\not@a@section
\let\chapter\not@a@section
\let\section\not@a@section
\newcommand\@gobbleopt[2][]{}
\makeatother`\@ifstar controlla se il comando è seguito dall’asterisco; se lo è, esegue \@gobble, altrimenti \@gobbleopt. Il primo mangia il suo argomento; il secondo mangia l’argomento obbligatorio e anche quello opzionale. Ovviamente vorrai aggiungere a \not@a@section qualche comando di spaziatura.

Non dovresti avere alcun problema di indice.

Ciao
Enrico

Go to top