testo giustificato e \texttt{parola\_parola} fuori margini

  • Creatore
    Topic
  • #77937
    Up
    0
    Down
    ::


    Salve. Sono nuovo del forum, spero di scrivere nella sezione giusta.
    Ho fatto delle ricerche, anche nel forum, senza trovare la soluzione al mio problema.
    Sono alle prese con la traduzione di un libro sulla programmazione.
    Ecco parte del lavoro svolto:
    https://github.com/simonesollena/AdvancedLinuxProgrammingITA
    Ho un problema con la giustificazione del testo quando inserisco delle parole “attaccate” con degli underscore, generalmente le metto dentro \texttt{}. Se queste casualmente cadono sul lato destro della riga vanno fuori bordo. Il comportamento che vorrei ottenere in questo caso è che venga mandato tutto il contenuto di \texttt{} a capo se non entra nella riga allargando lo spazio tra le parole della riga precedente per ottenere ancora il testo giustificato.
    Ecco un’immagine per mostrare ciò che accade:

    ed una porzione del testo latex:
    `Per impostare lo stato distaccato in un oggetto attributo di thread, usa
    \texttt{pthread\_attr\_setdetachstate}. Il primo argomento è un puntatore`

    Grazie.
    Simone Sollena.

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #77938
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        L’appendice sulla divisione in sillabe della GuidaGuIT spiega perché il testo in tyeletype sborda fuori dal margine; quindi generalmente non trovi queste cose in rete, ma, per noi italiani, la spiegazione è in una delle guide liberamente disponibili nella sezione documentazione di questo forum. Non c’è tutto, ma c’è molto.

        Mandare a capo tutto il testo in teletype si può fare con un bel \linebreak prima di \texttt, ma l’algoritmo che il motore di composizione usa non è quello di Word che, appunto, allargherebbe gli spazi solo della riga precedente producendo un risultato tipograficamante inaccettabile. Tu hai diverse altre possibilità:
        1) usare \linebreak
        2) usare l’ambiente sloppypar dentro al quale metti l’intero capoverso dentro a questo ambiente, non solo la stringa in teletype;
        3) mettere la stringa in teletype in display, per esempio mettendola dentro un ambiente \flushleft
        4) aumentare le tolleranze con cui il programma di composizione decide di spezzare in sillabe opure di non farlo; il procedimento è simile a quello di sloppypar, ma basta che tu racchiuda tutto il capoverso dentro a `{\tolerance =5000 …\par}` scegliendo tu un valore per \tolerance; sloppypar imposta 9999; per i motori di composizione il valore 10000 equivale a infinito mentre 9999 indica un valore molto grande ma finito. maggiore è il valore scelto, più larghi sono gli spazi interparola e minori sono le cesure in fin di riga.
        5) Non andare a capo ma, se e solo se scrivi in italiano, ci vai a metà della stringa usando il doppio apice ” o la sequenza “| come raccontato nella documentazione della lingua italian dando da terminale il comando texdoc italian, tabella 1, per esempio: `\texttt{pthread\_attr\_set”detachstate}`

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


          Per me quello che chiedi è sbagliato. LaTeX non può automatizzare una cosa del genere: produrrebbe capoversi orrendi,

          Il mio consiglio è di lasciar fare a LaTeX e di riformulare i capoversi problematici in sede di revisione finale.
          `La variabile \texttt{pthread\_attr\_setdetachstate} imposta lo stato distaccato in un oggetto attributo di thread. Il primo argomento è un puntatore
          `

        • #77940
          Up
          0
          Down
          ::


          escludo il \linebreak prima del \texttt giacché ce ne sono parecchi sparsi per tutto il documento e la loro posizione nella riga nel pdf risultante è molto variabile dal margine sinistro a quello destro.
          \flushleft: stesso discorso di \linebreak, ma in più crea una riga vuota
          Ho provato mettendo \sloppy per l’intero documento, sembrerebbe andar bene.
          Anche se in molti casi capita che il testo ecceda fuori dal bordo per una sola lettera e preferirei che latex restringa ancora di poco il testo precedente piuttosto che mandare a capo, se possibile e tipograficamente accettabile:

          (il riquadro nero dopo /lib indica che il testo è andato fuori dal bordo: è compilato con l’opzione draft in \documentclass)

          Ciò che voglio evitare, rispondendo anche a lorenzo.pantieri, è riformulare a mano i capoversi problematici, sia perché la traduzione potrebbe essere rivista e modificata ancora più volte, con conseguente spostamento in posizioni non prevedibili del testo contenuto in \texttt{}, sia perché in futuro potrebbero variare i margini o il formato del foglio.

          Vi ringrazio per le risposte.

        • #77941
          Up
          0
          Down
          ::

          simonesollena” post=77046escludo il \linebreak prima del \texttt giacché ce ne sono parecchi sparsi per tutto il documento e la loro posizione nella riga nel pdf risultante è molto variabile dal margine sinistro a quello destro.
          \flushleft: stesso discorso di \linebreak, ma in più crea una riga vuota
          Ho provato mettendo \sloppy per l’intero documento, sembrerebbe andar bene.
          Anche se in molti casi capita che il testo ecceda fuori dal bordo per una sola lettera e preferirei che latex restringa ancora di poco il testo precedente piuttosto che mandare a capo, se possibile e tipograficamente accettabile:

          (il riquadro nero dopo /lib indica che il testo è andato fuori dal bordo: è compilato con l’opzione draft in \documentclass)

          Ciò che voglio evitare, rispondendo anche a lorenzo.pantieri, è riformulare a mano i capoversi problematici, sia perché la traduzione potrebbe essere rivista e modificata ancora più volte, con conseguente spostamento in posizioni non prevedibili del testo contenuto in \texttt{}, sia perché in futuro potrebbero variare i margini o il formato del foglio.

          Vi ringrazio per le risposte.

          Concordo con Lorenzo. Riformulare è sempre la cosa migliore, usare sloppy quella peggiore.
          Se in futuro i margini diventeranno così larghi da non permettere alla riga in teletype di stare in una sola riga? Che fai?

          Ciao
          Tommaso

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

            simonesollena” post=77046
            Ciò che voglio evitare, rispondendo anche a lorenzo.pantieri, è riformulare a mano i capoversi problematici, sia perché la traduzione potrebbe essere rivista e modificata ancora più volte, con conseguente spostamento in posizioni non prevedibili del testo contenuto in \texttt{}, sia perché in futuro potrebbero variare i margini o il formato del foglio.

            Ripeto: impossibile risolvere automaticamente un problema come quello che proponi, potrebbero esserci righe riempite malissimo. Se non vuoi riformulare, la cosa migliore è usare un codice in display, che ti mette al riparo da ogni problema.
            `Per impostare lo stato distaccato in un oggetto attributo di thread, si usi la variabile
            \begin{verbatim}
            pthread\_attr\_setdetachstate
            \end{verbatim}
            il cui primo argomento è un puntatore.`
            Ripeto: le soluzioni che stai vagliando sono del tutto insoddisfacenti. Io te ne ho consigliate due; altre valide non ne vedo. Usare \linebreak o sloppy può andar bene in casi eccezionalissimi e solo in sede di revisione finale.

            ❗ ❗ ❗

          • #77943
            Up
            0
            Down
            ::


            Ho fatto una prova: tolto \sloppy e tirato fuori il nome dal \texttt{}
            Il problema del testo che va fuori dal bordo rimane, non dipende dal teletype:

            Ora, al di là del teletype, latex non dovrebbe automaticamente mandare a capo una “parola” che va oltre il limite della riga?

          • #77944
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Ti ho detto di leggere l’appendice sula divisione in sillabe della Guida GuIT qui sopra nella documentazione.

              Capiresti che ciò che è scritto in teletype non è divisibile in sillabe (automaticamente) proprio perché il teletype deve usarsi solo per quelle situazioni, come i testi informatici che non possono essere divisi in sillabe. Certo potresti ridefinire il file di descrizione del file teletype che stai usando, creandotene una variante con lo stesso nome, ma nella cartella dove risiede il main file del tuo documento e cambiare il valore dell’hyphenchar da -1 a 45.

              Secondo me la cosa non funzionerebbe lo stesso perché come avresti letto sulla appendice che ti ho indicato, la sillabazione non ha luogo per le stringhe letterali (quelle che noi chiamiamo parole) che siano precedute o seguite troppo da vicino da macro di vario genere.

              Resta solo la soluzione del doppio apice, che funziona anche con il teletype e scrivendo in italiano; sembrerebbe che sia l’unica soluzione che non hai provato fra quelle che ti ho proposto.

              Lavorare con flushleft non va male con due spazi sopra e sotto, perché mette in evidenza quella stringa informatica, staccandola dal testo circostante come si fa per le citazioni. Tuttavia se non vuoi usarlo, va bene lo stesso.

              Naturalmente se riformuli il capoverso è meglio; ovviamente se lavori con una giustezza del testo maggiore è possibile che le cose si sistemino meglio; se lavori con pdflatex e usi font non strani, ma usi il pacchetto microtype può essere che riesca a gestire i capoversi con i suoi trucchetti di microtipografia che consentono l’allargamento e i restringimento dei font in una riga secondo le necessità, ma sicuramente non di molto, fa conto di un massimo del 6% della lunghezza della riga, normalmente del 2%, Se funziona, funziona in automatico, ma non ti funziona sempre, ti riduce solo il numero di sforamenti di righe fuori margine, talvolta –io direi spesso — riduce gli sforamenti a zero.

              Poi la butto là, visto che non l’ho provato; il pacchetto listings mi pare che permetta il code folding nella riga, e mi pare che sia possibile specificare dopo o prima di quali caratteri si può ripiegare la riga; siccome consente di scrivere codice in line con il testo, se quello che mi sembra è vero (texdoc listings ), allora potresti trovare una soluzione quasi automatica.

            • #77945
              Up
              0
              Down
              ::

              simonesollena” post=77073Ora, al di là del teletype, latex non dovrebbe automaticamente mandare a capo una “parola” che va oltre il limite della riga?

              Quello che hai scritto tu non è una parola per TeX, poiché contiene caratteri non alfabetici (gli underscore). Detto questo, la “parola” non può essere sillabata.
              Inoltre, underscore a parte, non mi sembra che faccia parte del lessico inglese, per cui TeX proprio non saprebbe dove mettere la cesura.

              Da ultimo, non sta scritto da nessuna parte che TeX mandi a capo automaticamente una parola che fuoriesce nel margine.

              Ciao
              Tommaso

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

          Go to top