Formula in linea su più righe con allineamento a sinistra

  • Questo topic ha 16 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 3 anni, 3 mesi fa da Sara.
  • Creatore
    Topic
  • #121642
    Up
    0
    Down
    ::


    Vorrei scrivere una catena di uguaglianze tra espressioni algebriche su più righe allineando il primo simbolo di = di ogni riga con il primo simbolo di = della riga precedente, inoltre vorrei utilizzare le formule in linea e non in display perchè vorrei mantenere l’interlinea “standard” (come nel caso delle formule in linea e non come nel caso delle formule in display) e avere l’allineamento a sinistra.

    Faccio un esempio:

    `x = 4 + 3*2 =
    = 4 + 6 =
    = 10
    `

    Come posso fare?

Visualizzazione 15 filoni di risposte
  • Autore
    Risposte
    • #121643
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        vsara” post=122208Vorrei scrivere una catena di uguaglianze tra espressioni algebriche su più righe allineando il primo simbolo di = di ogni riga con il primo simbolo di = della riga precedente, inoltre vorrei utilizzare le formule in linea e non in display perchè vorrei mantenere l’interlinea “standard” (come nel caso delle formule in linea e non come nel caso delle formule in display) e avere l’allineamento a sinistra.

        Faccio un esempio:

        `x = 4 + 3*2 =
        = 4 + 6 =
        = 10
        `

        Come posso fare?

        Ciao.
        Userei un classico ambiente align del pacchetto amsmath.
        L’allineamento lo decidi tu inserendo &.
        Puoi leggerne la documentazione con il comando da terminale:`texdoc amsmath`
        Ciao
        Alla prossima
        R.

      • #121644
        Up
        0
        Down
        ::


        La soluzione che mi hai proposto risolve il problema dell’allineamento dei simboli di = e mantiene le formule allineate a sinistra come volevo.
        Tuttavia scrivendo le formule con l’ambiente align* l’interlinea è aumentato rispetto a quello del testo normale e io vorrei mantenerlo uguale, si può fare?

        Allego un esempio:
        `
        \documentclass[a4paper,11pt]{book}

        \usepackage[italian]{babel}
        \usepackage[utf8]{inputenc}

        \usepackage{amsmath}

        \begin{document}

        \noindent
        Qui scrivo una formula usando align*:
        \begin{align*}
        x+y+z&=x+z+y=y+x+z=\\
        &=x+y+z=x+z+y=y+x+z=y+z+x=z+x+y=\\
        &=100000000000
        \end{align*}
        Qui invece scrivo una formula in linea:\\
        $x+y+z=x+z+y=y+x+z=100000000000$
        Fine del documento

        \end{document}
        `

        [attachment=2756]formule.pdf[/attachment]

        Attachments:
        You must be logged in to view attached files.
      • #121645
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          vsara” post=122210La soluzione che mi hai proposto risolve il problema dell’allineamento dei simboli di = e mantiene le formule allineate a sinistra come volevo.
          Tuttavia scrivendo le formule con l’ambiente align* l’interlinea è aumentato rispetto a quello del testo normale e io vorrei mantenerlo uguale, si può fare?

          Allego un esempio:
          `
          \documentclass[a4paper,11pt]{book}

          \usepackage[italian]{babel}
          \usepackage[utf8]{inputenc}

          \usepackage{amsmath}

          \begin{document}

          \noindent
          Qui scrivo una formula usando align*:
          \begin{align*}
          x+y+z&=x+z+y=y+x+z=\\
          &=x+y+z=x+z+y=y+x+z=y+z+x=z+x+y=\\
          &=100000000000
          \end{align*}
          Qui invece scrivo una formula in linea:\\
          $x+y+z=x+z+y=y+x+z=100000000000$
          Fine del documento

          \end{document}
          `

          [attachment=2756]formule.pdf[/attachment]

          Ma cosa intendi per interlinea?
          A me pare tutto a posto.

          Ho modificato il tuo codice, riportando una modifica manuale ma è bruttino.
          La regola generale, secondo me, è che se non hai ragioni o necessità che lo giustifichino, non modificare i parametri della composizione impostati dalla classe. Sono stati decisi da esperti. Meglio lasciar fare a LaTeX.
          R.

        • #121646
          Up
          0
          Down
          ::


          Vorrei che lo spazio che c’è prima e dopo l’elemento align* fosse minore, precisamente vorrei che fosse lo stesso che c’è tra due righe successive di testo.
          Invece attualmente prima della prima riga dell’equazione e dopo l’ultima riga dell’equazione c’è uno spazio maggiore.
          Inoltre la prima riga dell’equazione non parte esattamente allineata a sinistra come le righe di testo ma leggermente più a destra.

        • #121647
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            vsara” post=122212Vorrei che lo spazio che c’è prima e dopo l’elemento align* fosse minore, precisamente vorrei che fosse lo stesso che c’è tra due righe successive di testo.
            Invece attualmente prima della prima riga dell’equazione e dopo l’ultima riga dell’equazione c’è uno spazio maggiore.
            Inoltre la prima riga dell’equazione non parte esattamente allineata a sinistra come le righe di testo ma leggermente più a destra.

            Ciao.
            Ci sono due registri di tipo “lunghezza”, che puoi impostare a zero. SI tratta di \abovedisplayskip e \belowdisplayskip.
            Da usare con saggezza.
            Alla prossima.
            R.

          • #121648
            Up
            0
            Down
            ::


            Grazie mille, era esattamente quello che mi serviva!

            Ora mi rimane da capire come posso allineare la prima riga della formula a sinistra, perchè guardando bene appare leggermente indentata.

          • #121649
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Hai uno spazio spurio prima della prima riga; prendi l’abitudione di mettere un segno di commento % dopo ogni parentesi chiusa a fine riga; lo spazio che segue una graffa chiusa è significativo.

            • #121650
              Up
              0
              Down
              ::


              `
              \documentclass[a4paper,11pt]{book}

              \usepackage[italian]{babel}
              \usepackage[utf8]{inputenc}
              \usepackage{amsmath}
              \usepackage{parskip}

              \begin{document}

              \setlength{\abovedisplayskip}{0pt}%
              \setlength{\belowdisplayskip}{0pt}%

              Qui scrivo una formula usando align*:
              \begin{align*}%
              x+y+z&=x+z+y=y+x+z=\\
              &=x+y+z=x+z+y=y+z+x=z+x+y=\\
              &=100000000000
              \end{align*}%
              Fine del documento

              \end{document}
              `

              Penso che il problema sia che l’ambiente align* centra di default il contenuto, io vorrei che la prima riga della formula fosse allineata a sinistra.

              [attachment=2757]formule1.pdf[/attachment]

              Attachments:
              You must be logged in to view attached files.
            • #121651
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                LaTeX Reference manual commentato; pagina 32, dove si descrive l’opzione flewn e la lunghezza mathindent.

                Ogni volta che ricevi l’indicazione della pagina di un documento di documentazione, dovresti fare un pensierinino, specialmente se la dicumentazione è il manuale di LaTeX scritto da Leslie Lamport, il papà di LaTeX…

              • #121652
                Up
                0
                Down
                ::


                Grazie! Esattamente quello che cercavo!

                Riguardo la documentazione, ho provato a consultarla per un nuovo dubbio riguardante la spaziatura verticale prima e dopo dell’ambiente itemize ma penso che mi sfugga qualcosa.

                Volevo eliminare lo spazio verticale che è presente prima e dopo dell’ambiente itemize, un po come abbiamo fatto settando a 0pt \abovedisplayskip e \belowdisplayskip nel caso dell’ambiente align*.
                Ho quindi impostato a 0pt \topsep ma mi sembra che non sia cambiato nulla. Allego un EMC.

                `
                \documentclass[a4paper,11pt]{book}

                \usepackage[italian]{babel}
                \usepackage[utf8]{inputenc}
                \usepackage{amsmath}
                \usepackage{parskip}
                \usepackage{enumitem}

                \setlist{nosep} % elimina lo spazio tra due righe successive dell'ambiente itemize

                \begin{document}

                \setlength{\topsep}{0pt} % dovrebbe eliminare lo spazio prima della prima riga e dopo l'ultima riga dell'ambiente itemize (?)

                Qui scrivo un elenco puntato con l'ambiente itemize:
                \begin{itemize}
                \item prima voce
                \item seconda voce
                \item terza voce
                \item quarta voce
                \end{itemize}
                Fine dell'elenco puntato.

                \end{document}
                `

                [attachment=2758]itemize.pdf[/attachment]

                Attachments:
                You must be logged in to view attached files.
              • #121653
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Molto complicato e la documentazione di enumitem sono aiuta per niente.

                  La figura di quel pacchettomostra chiaramante come sono definiti gli spazi all’interno delle liste; sopra e sotto lo spazio è formato da tre addendi, due dei quali possoo essere impostati con le opzioni, ma che comunuqe vengonoannullato con l’opzione nosep;
                  Il teszo spazio \parskip non fa propriamente parte delle impostazioni della lista,ma è un parametro globale che imposta lo spazio fra i capoversi, in teoria all’interno delle liste, ma che rimane in vigora anche dopo l’esecuzione di \end{}.

                  Lo spazio prima dei itemize può essere annullato con \paskip=0pt messo prima di \begin{itemize}, edelimina anche lo spazio dopo, ma se crei un gruppo che contiene \parskip=0pt, in questomodo `{\parskip=0pt\begin{itemize}[nosep]…\end{itemize}}` lo spazio dopo la lista rimane e il successivo testo non listato appare spaziato. se così ti va ben, questa è le soluzione, se non ti va bene bisogna arrampicarsi sui vetri e memorizzare il valore di \parskip prima di aprirre la lista e rispitristinael \parskip al valore originale, non dopo la lista, ma deopo la fine del capoverso che segue la lista, o almeno dopo la prima parola del capoverso che segue la lista.

                  Provo segnalare questo inconveniente a Bezos, il curatore di enumitem, ma dubito che faccia qualcosa, persino che mi risponda.

                  Tutto ciò premesso, tigliere gli spazi prima e dopo le liste sembra una cosa non praticata dalla buona tipografia.

                • #121654
                  Up
                  0
                  Down
                  ::

                  La soluzione che mi hai proposto risolve il problema dell’allineamento dei simboli di = e mantiene le formule allineate a sinistra come volevo.
                  Tuttavia scrivendo le formule con l’ambiente align* l’interlinea è aumentato rispetto a quello del testo normale e io vorrei mantenerlo uguale, si può fare?

                  Allego un esempio:
                  `
                  \documentclass[a4paper,11pt]{book}

                  \usepackage[italian]{babel}
                  \usepackage[utf8]{inputenc}

                  \usepackage{amsmath}

                  \begin{document}

                  \noindent
                  Qui scrivo una formula usando align*:
                  \begin{align*}
                  x+y+z&=x+z+y=y+x+z=\\
                  &=x+y+z=x+z+y=y+x+z=y+z+x=z+x+y=\\
                  &=100000000000
                  \end{align*}
                  Qui invece scrivo una formula in linea:\\
                  $x+y+z=x+z+y=y+x+z=100000000000$
                  Fine del documento

                  \end{document}
                  `

                  È facilissimo ottenere un pessimo risultato:

                  `
                  \documentclass[a4paper,11pt]{book}
                  \usepackage[T1]{fontenc}
                  \usepackage[italian]{babel}
                  \usepackage{amsmath}
                  \usepackage{parskip}

                  \begin{document}

                  Qui scrivo una formula usando align*:\\
                  $\begin{aligned}
                  x+y+z&=x+z+y=y+x+z=\\
                  &=x+y+z=x+z+y=y+x+z=y+z+x=z+x+y=\\
                  &=100000000000
                  \end{aligned}$

                  Qui invece scrivo una formula in linea:\\
                  $x+y+z=x+z+y=y+x+z=100000000000$

                  Fine del documento

                  \end{document}
                  `

                  Una volta visto che cosa viene fuori, evita.

                  Ciao
                  Enrico

                • #121655
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Javier Bezos,mi ha risposto e la soluzione è semplice, ma sebbene sia scritta nella documentazione di enumitem, è ben nascosta. Questo esempio minimo compilabile, basato sul tuo, a me funziona.`\documentclass[a4paper,11pt]{book}

                    \usepackage[italian]{babel}
                    %\usepackage[utf8]{inputenc} %%% La codifica utf8 è quella di default da alcuni anni; non c'è più bisogno di inserire questa riga
                    \usepackage{amsmath}
                    \usepackage{parskip}
                    \usepackage{enumitem}

                    \begin{document}

                    Qui scrivo un elenco puntato con l'ambiente itemize:
                    \begin{itemize}[nosep,topsep=-\parskip]
                    \item prima voce
                    \item seconda voce
                    \item terza voce
                    \item quarta voce
                    \end{itemize}
                    Fine dell'elenco puntato.

                    Altro capoverso
                    \end{document}
                    `Bene inteso, funziona col tuo preambolo; la pratica di evitare il rientro dei capoversi inserendo invece un \parskio di circa una riga, è pratica da word processor, non da tipografia. Anche l’eliminazione degli spazi sopra, sotto e in mezzo agli \item è una pratica da word processor. In sostanza stai cercando di imitare quello che puoi ottenere con Word, Pages, Writer, e simili word processor, che funzionano come macchine da scrivere intelligenti, ma non hanno nulla a che vedere con la composizione tipografica di LaTeX e dei programmi di impaginazione professionali, come per esempio InDesign.

                    Certo, la decisione è tua; io ti suggerisco solo che cosa bisogna evitare di fare se si vuoie una impaginazione ad alto livello, come LaTeX sa fare.

                  • #121656
                    Up
                    0
                    Down
                    ::



                    @egreg9
                    :

                    Ho aggiunto il simbolo $ prima e dopo align* ma mi sembra che la distanza tra righe successive dell’equazione in align* sia sia rimasto maggiore rispetto all’equazione in linea. Allego il codice e il risultato.

                    `
                    \documentclass[a4paper,11pt]{book}
                    \usepackage[T1]{fontenc}
                    \usepackage[italian]{babel}
                    \usepackage{amsmath}
                    \usepackage{parskip}

                    \begin{document}

                    Qui scrivo una formula con align*:\\
                    $\begin{aligned}
                    x x x x x x x x x x x x x x x x x &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x
                    \end{aligned}$

                    Qui invece scrivo una formula in linea:\\
                    $x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x$

                    \end{document}
                    `

                    [attachment=2759]formule2.pdf[/attachment]


                    @OldClaudio
                    :

                    Grazie mille per questa soluzione! In generale sono d’accordo con te sul fatto che è meglio che sia LaTeX a gestire l’impaginazione, ma in questo caso particolare ritengo che questo risultato sia proprio quello di cui necessitavo!

                    Attachments:
                    You must be logged in to view attached files.
                  • #121657
                    Up
                    0
                    Down
                    ::

                    vsara” post=122222 @egreg9:

                    Ho aggiunto il simbolo $ prima e dopo align* ma mi sembra che la distanza tra righe successive dell’equazione in align* sia sia rimasto maggiore rispetto all’equazione in linea. Allego il codice e il risultato.

                    `
                    \documentclass[a4paper,11pt]{book}
                    \usepackage[T1]{fontenc}
                    \usepackage[italian]{babel}
                    \usepackage{amsmath}
                    \usepackage{parskip}

                    \begin{document}

                    Qui scrivo una formula con align*:\\
                    $\begin{aligned}
                    x x x x x x x x x x x x x x x x x &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x
                    \end{aligned}$

                    Qui invece scrivo una formula in linea:\\
                    $x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x = x x x x x x x x x x x x x x x x x$

                    \end{document}
                    `

                    Non capisco la necessità di scrivere roba del genere. Evidenziare con spazi le formule è il modo giusto. Comunque, [tt]aligned[/tt] aggiunge spaziatura verticale, ma è facile annullarla.

                    `
                    \documentclass[a4paper,11pt]{book}
                    \usepackage[T1]{fontenc}
                    \usepackage[italian]{babel}
                    \usepackage{amsmath}

                    \begin{document}

                    Qui scrivo una formula con align*:\\
                    $\begin{aligned}
                    x x x x x x x x x x x x x x x x x &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x
                    \end{aligned}$

                    Qui scrivo una formula con align*:\\
                    $\openup-1\jot\begin{aligned}
                    x x x x x x x x x x x x x x x x x &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x =\\
                    &= x x x x x x x x x x x x x x x x x
                    \end{aligned}$

                    \end{document}
                    `

                    Non farlo, i tuoi lettori ne saranno grati.

                    Ciao
                    Enrico

                  • #121658
                    Up
                    0
                    Down
                    ::


                    Esattamente questo intendevo, grazie!

                    In generale evito di modificare l’impaginazione di LaTeX ma in questo caso ne avevo bisogno.

                    Posso chiederti se anzichè scrivere il comando \openup-1\jot prima di ogni \begin{aligned} posso dire a LaTeX in una volta sola che voglio che tutte le volte che utilizzo l’ambiente aligned in questo documento lui lo consideri automaticamente con il comando \openup-1\jot ?

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

                Go to top