Copiare un comando di sezionamento

  • Creatore
    Topic
  • #8796
    Up
    0
    Down
    ::


    Ciao a tutti,
    desidero creare un ambiente che, nella formattazione visiva sia uguale in tutto e per tutto a come è definito il comando \paragraph in book.cls (modifico solo l’indentazione per leggibilità, ma il contenuto resta inalterato)
    `\newcommand\paragraph{\@startsection
    {paragraph}% Il nome.
    {4}% Il livello.
    {\z@}% L'indentazione.
    {3.25ex \@plus1ex \@minus.2ex}% Lo spazio prima.
    {-1em}% Lo spazio dopo.
    {\normalfont\normalsize\bfseries}}% Lo stile.`
    Il mio problema è che, come si può vedere sopra, i comandi di sezionamento da \section a \subparagraph hanno una definizione un po’ strana (almeno per me), nel senso che non usano istruzioni a me già note (come \hspace, \vspace, ecc.). Per intenderci, la definizione di \chapter è un po’ più comprensibile per me, nel senso che mi sembra una lettura più “lineare”.

    Forse la definizione dei comandi di sezionamento sarebbe più leggibile per me se sapessi come è definito il comando \@startsection, ma di certo quest’ultimo non è definito in book.cls, e non saprei dove andarlo a pescare.

    Ad ogni modo, questo mio ambiente, in versione minimale, l’ho definito così
    `\newenvironment{esercizio}[1]{% L'ambiente prende un parametro: il titolo
    % dell'esercizio.
    \noindent% L'ambiente non e` preceduto da alcuna
    % indentazione.
    \normalfont% I caratteri sono scritti normalmente, in
    % romano.
    \normalsize% I caratteri hanno un corpo normale.
    {\bfseries#1}% *Solo* il primo argomento (il titolo) e` in
    % grassetto.
    \hspace{.575em}% Vi e` una distanza orizzontale che separa il
    % titolo dal resto della consegna.
    }
    {%
    \clearpage% Alla fine dell'esercizio vi e` un salto pagina.
    }`
    Ora vorrei spiegare perché ho scritto certe cose in un modo un po’ diverso dalla definizione di \paragraph, pur volendo arrivare alla stessa formattazione:

    • le informazioni semantiche di \paragraph {il fatto che si chiami così, che il suo livello sia 4, ecc.} non sono rilevanti, quindi le ho lasciate stare;

    • l’indentazione: il comando \z@ non è definito in book.cls; per sapere il suo valore ho creato un file LaTeX minimo così definito
      `\documentclass{article}

      \makeatletter
      \let\zeta\z@
      \makeatother

      \begin{document}
      \the\zeta
      \end{document}`
      grazie al quale ho potuto scoprire che il valore di quell’istruzione è pari a 0.0pt (l’assegnamento l’ho fatto solo perché quel comando aveva la chiocciola e non potevo quindi usarlo con tranquillità nel resto del documento). Mi rendo conto che si poteva vedere anche ad occhio in uno dei formati di output che \paragraph non prevede indentazione, ma era giusto per essere sicuri (io ho usato \noindent, ma il risultato non cambia);

    • lo spazio prima: io vorrei capire, nell’originale, qual’era il comando a cui è stato passato come parametro il valore {3.25ex \@plus1ex \@minus.2ex}. Presumo che sia \vspace, dato che può accettare anche lunghezze elastiche, ma non posso esserne sicuro.

      Ad ogni modo, non ho inserito niente di simile nel mio ambiente perché ogni occorrenza compare all’inizio di ogni pagina, e quindi non avrebbe avuto senso inserire uno spazio prima. Se però avessi dovuto farlo avrei scritto
      `\vspace{3.25ex plus1ex minus.2ex}`
      (ho tolto le chiocciole per non giocare con \makeatletter, sperando che i comandi plus e minus con o senza chiocciola diano lo stesso risultato);

    • lo spazio dopo: questo sinceramente non mi è chiaro. Prima di tutto non capisco da dove deriva la non andata a capo tra il titolo ed il testo che segue. Se si dà un’occhiata a come è definito questo parametro per \section in book.cls
      `{2.3ex \@plus.2ex}`
      rispetto a quello di \paragraph
      `{-1em}`
      l’unica regola pragmatica che mi inventerei è che, alla fine dei conti, se la lunghezza è positiva si introduce un’andata a capo, altrimenti no (chiederei conferma).
      Cos’è quell’\hspace{.575em} che ho introdotto io? Be’, all’inizio avevo provato con \vspace{-1em}, come in \paragraph, ma la distanza non corrispondeva (provare per credere) e quindi alla fine sono andato per tentativi, ad occhio. Direi che il risultato è abbastanza simile, ma non uguale (anche aumentando il corpo del carattere da 10pt a 12pt pare che vada tutto bene ma non escluderei eventuali effetti collaterali). Comunque preferirei passare al mio ambiente lo stesso valore passato a \paragraph (-1em), se solo sapessi quale comando chiamare…

    In definitiva, quello che vorrei fare è rendere il mio ambiente uguale in tutto e per tutto a \paragraph nella formattazione, ma per poterlo fare ho bisogno di sapere quali istruzioni esso chiama (e quindi, immagino, com’è fatto \@startsection…)

    Grazie a tutti per l’attenzione! A presto!

Visualizzazione 0 filoni di risposte
  • Autore
    Risposte
    • #8797
      Up
      0
      Down
      ::

      Ciao a tutti,
      desidero creare un ambiente che, nella formattazione visiva sia uguale in tutto e per tutto a come è definito il comando \paragraph in book.cls (modifico solo l’indentazione per leggibilità, ma il contenuto resta inalterato)

      In definitiva, quello che vorrei fare è rendere il mio ambiente uguale in tutto e per tutto a \paragraph nella formattazione, ma per poterlo fare ho bisogno di sapere quali istruzioni esso chiama (e quindi, immagino, com’è fatto \@startsection…)

      Alcune delle tue ipotesi sono corrette. Altre meno. I modi per capire com’è fatto \@startsection sono due: (1) leggere source2e.dvi (o .pdf) che potresti trovare nella tua distribuzione o puoi generare; (2) consultare il LaTeX companion.

      Una cosa di sicuro manca nella tua definizione: dopo \hspace{…} devi mettere \ignorespaces, altrimenti LaTeX vede lo spazio che viene dopo \begin{esercizio}{titolo} (è di solito un fine riga, ma non cambia la faccenda).

      Ciao
      Enrico

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

Go to top