Ambiente per enfasi forte: testo in riquadro

  • Creatore
    Topic
  • #11968
    Up
    0
    Down
    ::


    Salve a tutti,
    come richiesto nella discussione sottolineato reperibile all’indirizzo <http://www.guit.sssup.it/phpBB2/viewtopic.php?t=396>, ho provato a scrivere un ambiente per un’enfasi «molto forte» per una porzione di documento, che si capisse subito essere di grande rilievo e che saltasse subito all’occhio; pensavo di risolvere in quattro e quattr’otto, e invece non ho cavato un ragno dal buco, in quanto sono saltati fuori più problemi che soluzioni. Ci sono rimasto male.

    Un ambiente di questo tipo me l’ero immaginato come un blocco di testo racchiuso in un riquadro. Questo era un esempio di prova (non ridete per l’ambiente «center», so che non si dovrebbe usare, ma questa era solo una prova; fossi stato in grado di realizzare l’ambiente finale «enfasiForte» avrei richiamato «\centering»):
    `Testo normale

    \begin{center}
    {\fboxsep=.5em\fbox{\begin{minipage}{.9\linewidth}\setlength{\parindent}{1.5em}
    Testo importante

    Testo importante
    \end{minipage}}}
    \end{center}

    Testo normale
    `
    L’esempio che avete appena visto, funziona. L’unico problema (fin qui) che non sono stato in grado di risolvere è che l’ambiente «minipage» azzera «\parindent»; da <http://www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-267.html>:

    There is no paragraph indentation in the minipage environment. That is, LaTeX sets \parindent to zero; however, you may override this with a \setlength command.

    Bel suggerimento, ma quanto vale «\parindent»? un «\the\parindent» esplicito nel corpo mi ritorna 15.0pt, ma dubito seriamente che nei sorgenti di LaTeX (o di TeX) questa grandezza sia stata definita in modo non elastico. Come potete vedere sopra, ho provato a cavarmela «a occhio» con 1.5em, ma se qualcuno sa riportarmi la definizione di «\parindent» (o dirmi in quale file si trova) gliene sarò eternamente grato.

    Detto ciò, ho provato a passare alla definizione di un ambiente apposito:
    `\newenvironment{enfasiForte}{%
    \par\medskip\centering{\fboxsep=.5em\fbox{\begin{minipage}{.9\linewidth}\setlength{\parindent}{1.5em}%
    }%
    {%
    \end{minipage}}}\par\medskip%
    }
    `
    che, naturalmente non funziona. Il problema sembra essere «\fbox»; infatti, se provate a rimuoverlo dalla definizione
    `\newenvironment{enfasiForte}{%
    \par\medskip\centering\begin{minipage}{.9\linewidth}\setlength{\parindent}{1.5em}%
    }%
    {%
    \end{minipage}\par\medskip%
    }
    `
    tutto fila liscio (a parte il fatto che non c’è più il riquadro).

    Come mai questa cosa? Avrei due dubbi in merito:

    1. forse che «\fbox» crede che la parentesi graffa che chiude la definizione iniziale dell’ambiente «enfasiForte» sia la graffa che chiude il comando («\fbox») stesso?

    2. oppure, come scritto in questa pagina, <http://www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/fragile.html>:

      Environments delimited by \begin … \end are fragile

      (per la cronaca, «\protect» nella definizione non risolve il problema).

    Come posso fare, quindi, per inserire un comando «\fbox» nella definizione di un ambiente?

    P.S. avevo in mente soluzioni molto più graziose di questa, come riquadri e ombreggiature, ma per adesso mi fermo, finché non avrò capito perche quel comando non può stare in un ambiente.

    Ciao!

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #11969
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::

        …ho provato a scrivere un ambiente per un’enfasi «molto forte» per una porzione di documento, che si capisse subito essere di grande rilievo e che saltasse subito all’occhio; pensavo di risolvere in quattro e quattr’otto, e invece non ho cavato un ragno dal buco, in quanto sono saltati fuori più problemi che soluzioni. Ci sono rimasto male.

        Di primo acchito, condivido la tua esigenza di creare un ambiente per un’enfasi “molto forte”. Tieni comunque presente che è non è una prassi diffusa e che Enrico ti ha consigliato il corsivo.

        Quando al “come” realizzare l’ambiente, ti do un consiglio di ordine generale: non andare mai a mano, cerca piuttosto un pacchetto che faccia quello che chiedi. I problemi che possono sorgere “andando a mano” sono spesso subdoli e difficili da individuare e correggere.

        Ciò detto, mi pare che il pacchetto fancybox possa essere utile, ma è probabile che ne esistano altri: fa’ una ricerca su CTAN e su Sarovar.

        Ciao,
        L.

      • #11970
        Up
        0
        Down
        ::


        Ciao Lorenzo, e grazie per l’attenzione anche per questo problema.

        Tieni comunque presente che è non è una prassi diffusa e che Enrico ti ha consigliato il corsivo.

        Non me ne sono mai dimenticato. In pratica, quando ho bisogno di mettere in evidenza qualcosa (e già di mio lo faccio raramente) uso sempre il comando «\emph». A voler essere sincero, non credo che userò mai nient’altro. Penso di essere una d quelle persone che, alla fine, useranno tutto quello che è «predefinito», ma questo non vuol dire che, per uso personale (cioè per «giocare» a casa mia), io non voglia fare delle prove con LaTeX ad un livello più basso. Non credo che ci sia niente di male, in fin dei conti all’Università ci facevano fare un sacco di esercizi con i vari linguaggi (anche se quelli erano linguaggi di programmazione), e anche se tutto questo va un po’ contro alla filosofia del LaTeX, fare un po’ di esercizio a basso livello ogni tanto non credo guasti, potrebbero sempre venir fuori delle cose carine. Pensa a tutti quelli che hanno scritto pacchetti di macro «serie»… saranno dovuti partire da zero anche loro, no?

        Quando al “come” realizzare l’ambiente, ti do un consiglio di ordine generale: non andare mai a mano, cerca piuttosto un pacchetto che faccia quello che chiedi. I problemi che possono sorgere “andando a mano” sono spesso subdoli e difficili da individuare e correggere.

        Non lo metto in dubbio. Per esempio, prima mi ero posto una domanda sul formato della data restituito da «\today» e, non essendo pienamente soddisfatto da questo, ho cercato un pacchetto che ne gestisse la formattazione, non mi sono certo messo a smanettare di persona per cambiare il tutto. Quel pacchetto l’ho trovato (datetime), e ora stavo leggendo la sua documentazione.

        Ma, consentimi di essere franco, dando un’occhiata al forum, mi è capitato di vedere che in più occasioni i problemi degli utenti sono stati risolti creando comandi e ambienti ad hoc, piuttosto che consigliando pacchetti (anche se, hai ragione tu, la maggior parte delle volte si opta per quest’ultima strada). Ho visto che sono stati definiti preamboli, comandi vari, la definizione dei quali è stata molto utile, ambienti numerati con variabili e contatori… in fin dei conti io qui sto cercando solo di mettere un riquadro in un ambiente, e anche se alla fine questo è solo un gioco, credo di avere il diritto di capire perché si può o non si può fare.

        Ciò detto, mi pare che il pacchetto fancybox possa essere utile […]

        Fancybox lo conosco, ma non mi piace proprio nessuno dei comandi che propone. Fra l’altro, quel pacchetto metteva a disposizione degli utenti diversi comandi per modificare diversi parametri delle scatole, ma non quelli a cui ero interessato io. No, sinceramente, per giocare con le scatole, «\fbox» e «\fcolorbox» mi bastano e avanzano. Di recente ho scoperto il pacchetto «pst-blur» dei PSTricks e il bellissimo comando «\psblurbox», ma sinceramente non credo che cercherò nulla di più complicato.

        […] ma è probabile che ne esistano altri: fa’ una ricerca su CTAN e su Sarovar.

        Ti prego di non offenderti, ma stavolta non seguirò il tuo consiglio, proprio perché non voglio fare assolutamente nulla di più complicato. Voglio invece cercare di capire dove ho sbagliato. E non voglio fermarmi solo perché posso trovare qualcosa di più grande di me. Se così sarà, vorrà dire che leggerò un’altra fonte di documentazione e alla fine ne verrò a capo, magari aiutato da quelli che avranno voluto darmi una mano.

        Grazie per l’attenzione e a presto!

      • #11971
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::

          Penso di essere una di quelle persone che, alla fine, useranno tutto quello che è «predefinito», ma questo non vuol dire che […] io non voglia fare delle prove con LaTeX ad un livello più basso.

          Pensa a tutti quelli che hanno scritto pacchetti di macro «serie»… saranno dovuti partire da zero anche loro, no?

          Sono d’accordo, ci mancherebbe! Il mio personale punto di vista è sempre quello dell’utente di LaTeX (e non del programmatore di LaTeX: non ne ho la competenza).

          …mi è capitato di vedere che in più occasioni i problemi degli utenti sono stati risolti creando comandi e ambienti ad hoc, piuttosto che consigliando pacchetti (anche se, hai ragione tu, la maggior parte delle volte si opta per quest’ultima strada).

          Vero! Personalizzare il LaTeX è un’esigenza con cui tutti, prima o poi, si scontrano. La via maestra, come dici, sono i pacchetti: risolvono una gamma amplissima di esigenze e danno ottimi risultati. Quando proprio non si può fare diversamente (o perché non esiste un pacchetto che fa quello che ci serve o perché l’uso di un pacchetto sarebbe sovradimensionato), ci sono i comandi e gli ambienti ad hoc: e qui la competenza e la disponibilità dello Staff di GuIT si rivela una risorsa insostituibile…

          Ciao e buon lavoro,
          Lorenzo

        • #11972
          Up
          0
          Down
          ::

          Salve a tutti,
          come richiesto nella discussione sottolineato reperibile all’indirizzo <http://www.guit.sssup.it/phpBB2/viewtopic.php?t=396>, ho provato a scrivere un ambiente per un’enfasi «molto forte» per una porzione di documento, che si capisse subito essere di grande rilievo e che saltasse subito all’occhio; pensavo di risolvere in quattro e quattr’otto, e invece non ho cavato un ragno dal buco, in quanto sono saltati fuori più problemi che soluzioni. Ci sono rimasto male.

          Un ambiente di questo tipo me l’ero immaginato come un blocco di testo racchiuso in un riquadro. Questo era un esempio di prova (non ridete per l’ambiente «center», so che non si dovrebbe usare, ma questa era solo una prova; fossi stato in grado di realizzare l’ambiente finale «enfasiForte» avrei richiamato «\centering»):
          `Testo normale

          \begin{center}
          {\fboxsep=.5em\fbox{\begin{minipage}{.9\linewidth}\setlength{\parindent}{1.5em}
          Testo importante

          Testo importante
          \end{minipage}}}
          \end{center}

          Testo normale
          `

          Non c’è niente di male a usare l’ambiente center. Non va usato all’interno di un ambiente figure o table, ma è un’altra faccenda.

          L’esempio che avete appena visto, funziona. L’unico problema (fin qui) che non sono stato in grado di risolvere è che l’ambiente «minipage» azzera «\parindent»; da <http://www.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-267.html>:

          There is no paragraph indentation in the minipage environment. That is, LaTeX sets \parindent to zero; however, you may override this with a \setlength command.

          Bel suggerimento, ma quanto vale «\parindent»? un «\the\parindent» esplicito nel corpo mi ritorna 15.0pt, ma dubito seriamente che nei sorgenti di LaTeX (o di TeX) questa grandezza sia stata definita in modo non elastico. Come potete vedere sopra, ho provato a cavarmela «a occhio» con 1.5em, ma se qualcuno sa riportarmi la definizione di «\parindent» (o dirmi in quale file si trova) gliene sarò eternamente grato.

          Vale quanto vale 🙂 Di sicuro non è una lunghezza elastica, non avrebbe senso.

          Detto ciò, ho provato a passare alla definizione di un ambiente apposito:
          `\newenvironment{enfasiForte}{%
          \par\medskip\centering{\fboxsep=.5em\fbox{\begin{minipage}{.9\linewidth}\setlength{\parindent}{1.5em}%
          }%
          {%
          \end{minipage}}}\par\medskip%
          }`
          che, naturalmente non funziona.

          No, non funziona. Non puoi aprire una graffa nella prima parte e chiuderla nella seconda. L’unico modo è di usare l’ambiente lrbox, ideato proprio per questo.
          `\newsavebox{\eFbox}\newlength{\eFlen}

          \newenvironment{enfasiForte}{%
          \par\medskip
          \setlength{\eFlen}{\parindent}% memorizzo la dimensione del rientro
          \centering % prima di dare \centering che la azzera
          \fboxsep=.5em
          \begin{lrbox}{\eFbox}%
          \begin{minipage}{.9\linewidth}
          \setlength{\parindent}{\eFlen}%
          }
          {%
          \end{minipage}%
          \end{lrbox}
          \fbox{\usebox{\eFbox}}%
          \par\medskip
          }`
          Ciao
          Enrico

        • #11973
          Up
          0
          Down
          ::


          Ciao Enrico, mi dispiace che tu abbia perso del tempo per rispondermi, alla fine sono riuscito a combinare, grazie a questo messaggio: <http://article.gmane.org/gmane.comp.tex.danish/4960> (fortunatamente il linguaggio è «universale», perché il danese proprio non lo capisco).

          La soluzione cui ero arrivato:
          `\newsavebox{\contenitore}

          \newenvironment{enfasiForte}{%
          \par\medskip\centering\begin{lrbox}{\contenitore}%
          \begin{minipage}{.95\linewidth}%
          \setlength{\parindent}{1.5em}%
          }%
          {%
          \end{minipage}
          \end{lrbox}%
          {\fboxsep=.5em\fbox{\usebox{\contenitore}}}%
          \par\medskip%
          }
          `
          Comunque, ti ringrazio, e domani cercherò di migliorare la mia soluzione integrandola con la tua, che sicuramente presenterà qualche aspetto che non avrò preso in considerazione.

          Quello che mi fa sorridere è che l’ambiente «lrbox» l’avevo già visto, ma non credevo fosse quello il suo ambito di utilizzo principale; dagli Appunti di informatica libera, <http://na.mirror.garr.it/mirrors/appuntilinux/HTML/a2.htm>, capitolo LaTeX: spazi e scatole, sezione Testo da salvare e da recuperare:

          LaTeX ha una capacità limitata di memorizzare del testo in modo da poterlo inserire successivamente nella composizione:
          `+———————————————————————+
          | Comando | Descrizione |
          +———————————————————————+
          | \begin{lrbox}{n}testo\end{lrbox} | accumula nel registro n il testo |
          | | indicato. |
          |———————————————————————|
          | | inserisce nella composizione il |
          | \usebox{n} | testo corrispondente al registro |
          | | n, in una scatola orizzontale. |
          +———————————————————————+
          `
          Esempio (codice):
          `\begin{lrbox}{1}
          ciao a tutti
          \end{lrbox}

          \begin{lrbox}{2}
          ma che bello
          \end{lrbox}

          Bla bla bla \usebox{2} bla bla bla \usebox{1} bla bla bla \usebox{2} bla
          bla bla \usebox{1} bla bla bla
          `
          Esempio (output):
          `Bla bla bla ma che bello bla bla bla ciao a tutti bla bla bla ma che bello bla
          bla bla ciao a tutti bla bla bla
          `

          non ridete per l’ambiente «center», so che non si dovrebbe usare, ma questa era solo una prova; fossi stato in grado di realizzare l’ambiente finale «enfasiForte» avrei richiamato «\centering»

          Non c’è niente di male a usare l’ambiente center. Non va usato all’interno di un ambiente figure o table, ma è un’altra faccenda.

          Intendevo dire che lo stavo usavo direttamente nel corpo ver vedere l’effetto finale, ma se fossi riuscito ad arrivare alla definizione di un ambiente apposito lo avrei sicuramente rimosso, in quanto

          • è vero che non lo si usa né in «figure» né in «table», ma secondo me non lo si dovrebbe usare in nessun altro ambiente in cui, comunque, si va a definire manualmente una qualche forma di spaziatura (nel mio caso, «\par» e «\medskip»);

          • più in generale, sempre per la separazione tra logica e presentazione, se possibile, cerco sempre di spostare la seconda nelle classi di documento e nei pacchetti (la centratura, per me, è presentazione, non logica).

          l’ambiente «minipage» azzera «\parindent»
          […]
          Bel suggerimento, ma quanto vale «\parindent»? un «\the\parindent» esplicito nel corpo mi ritorna 15.0pt, ma dubito seriamente che nei sorgenti di LaTeX (o di TeX) questa grandezza sia stata definita in modo non elastico.

          Vale quanto vale 🙂 Di sicuro non è una lunghezza elastica, non avrebbe senso.

          Non si finisce mai di imparare. Ad ogni modo, sono rimasto colpito dal fatto che l’unità di misura di quella lunghezza non è qualcosa di relativo, come em. Immagino che questo voglia dire che classi di documento diverse (se vogliono) ridefiniranno questa lunghezza secondo le loro esigenze. Me la immaginavo come un qualcosa di «intoccabile».

          Non puoi aprire una graffa nella prima parte e chiuderla nella seconda. L’unico modo è di usare l’ambiente lrbox, ideato proprio per questo

          Ecco la morale di oggi.

          `\setlength{\eFlen}{\parindent}% memorizzo la dimensione del rientro
          \centering % prima di dare \centering che la azzera
          `

          Anche questa è una cosa molto utile che mi servirà sicuramente in futuro.

          Due ultime osservazioni prima che io pensi a sistemare definitivamente l’ambiente:

          1. è indifferente se lo spazio tra il riquadro e il suo contenuto («\fboxsep») viene dichiarato all’interno dell’ambiente «lrbox» (come hai fatto tu) o nel momento in cui questo «registro» viene usato (come ho fatto io)? Sembrerebbe di sì;

          2. memore di un’altra conversazione che abbiamo avuto un po’ di tempo fa (<http://www.guit.sssup.it/phpBB2/viewtopic.php?p=7872#7872>), mi sono chiesto se anche nella definizione di questo ambiente ci sarebbe stato bisogno di uno «\ignorespaces», ma sembrerebbe che con una o più andate a capo il risultato (in questo caso) sia identico. Immagino dipenda dal fatto che ci troviamo in un contesto differente.

          Grazie e a presto!

        • #11974
          Up
          0
          Down
          ::

          Ciao Enrico, mi dispiace che tu abbia perso del tempo per rispondermi, alla fine sono riuscito a combinare, grazie a questo messaggio: <http://article.gmane.org/gmane.comp.tex.danish/4960> (fortunatamente il linguaggio è «universale», perché il danese proprio non lo capisco).

          Come vedi, la soluzione è molto simile a quella che ti ho indicato io

          Non si finisce mai di imparare. Ad ogni modo, sono rimasto colpito dal fatto che l’unità di misura di quella lunghezza non è qualcosa di relativo, come em. Immagino che questo voglia dire che classi di documento diverse (se vogliono) ridefiniranno questa lunghezza secondo le loro esigenze. Me la immaginavo come un qualcosa di «intoccabile».

          È una scelta di chi disegna la classe del documento. Il fatto che chiedendo
          `\showthe\parindent`
          la risposta sia in punti è perché così vengono sempre rappresentate le dimensioni: puoi darle in cm, dd, bp, em, eccetera, ma internamente vengono sempre convertite nell’unità sp (65536sp=1pt) e mostrate in punti (pt).

          Memore di un’altra conversazione che abbiamo avuto un po’ di tempo fa (<http://www.guit.sssup.it/phpBB2/viewtopic.php?p=7872#7872>), mi sono chiesto se anche nella definizione di questo ambiente ci sarebbe stato bisogno di uno «\ignorespaces», ma sembrerebbe che con una o più andate a capo il risultato (in questo caso) sia identico. Immagino dipenda dal fatto che ci troviamo in un contesto differente.

          Ci pensano già minipage e lrbox.

          Ciao
          Enrico

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

      Go to top