annullare testo fuori dai margini

  • Creatore
    Topic
  • #114634
    Up
    0
    Down
    ::


    Buonasera a tutti
    Vi allego innanzitutto il preambolo del mio documento:

    `
    \documentclass[11pt,a4paper,titlepage,twoside,openright]{book}
    \usepackage[english,italian]{babel}
    \usepackage{graphicx}
    \usepackage[utf8]{inputenc}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    \usepackage[output-decimal-marker={,}]{siunitx}
    \usepackage{booktabs}
    \usepackage{matlab-prettifier}
    \usepackage{fancyhdr}
    \usepackage[binding=1cm]{layaureo}
    \usepackage{lscape}
    \usepackage{caption}
    \usepackage{bookmark}
    \usepackage{xcolor}
    \usepackage{indentfirst} % Prima riga indentata
    \usepackage{hyperref}

    \hypersetup{pdfauthor={bla}, pdfsubject={bla}, pdftitle={bla}, pdfkeywords={bla}}

    \captionsetup{tableposition=top,figureposition=bottom,font=small}

    % comando per eliminare numero pagina e testatine nelle pagine bianche
    \makeatletter
    \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
    \hbox{}
    \thispagestyle{empty}
    \newpage
    \if@twocolumn\hbox{}\newpage\fi\fi\fi}
    \makeatother

    % comando per creare testatine piccole e belle
    \pagestyle{fancy}
    \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
    \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
    \fancyhf{}
    \fancyhead[LE,RO]{\scshape\thepage}
    \fancyhead[LO]{\scshape\footnotesize\nouppercase{\rightmark}}
    \fancyhead[RE]{\scshape\footnotesize\nouppercase{\leftmark}}
    \renewcommand{\headrulewidth}{0.5pt}
    \renewcommand{\footrulewidth}{0pt}
    \addtolength{\headheight}{2.5pt}

    \renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
    \newcommand{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}

    \title{\textsc{Relazione di bla}}
    \author{bla \\ \emph{bla} \\ \mail{bla@bla.it}}

    `

    In questo documento io ho aggiunto delle porzioni di testo dentro l’ambiente “verbatim”.
    In queste porzioni però, le righe sbordano dal magine destro.
    Siccome la parte finale di queste righe non mi interessa, vorrei tagliarle in un solo colpo, in modo che la riga, una volta arrivata al margine,
    si cancelli e lasci spazio bianco oltre il margine.
    Potrei cancellarle “a mano” una per una, ma sono centinaia. 🙁
    Qualcuno sa come fare?
    Grazie

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #114635
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Dipende da che cosa contiene il testo che vuoi scrivere verbatim.

        Se non contiene macro e caratteri speciali ti basta comporre semplicemente dentro un gruppo con il carattere della famiglia ttfamily; qualcosa come questo:`… bla bla bla.

        \begingroup \raggedright \ttfamily \obeylines

        Testo da comporre in carattere teletype

        \endgroup}

        Bla bal bla …`

        Altrimenti non ti resta che procedere più o meno a mano; Per esempio se ci sono caratteri speciali li devi sostuituire tutti con le macro che servono per stamparli: ogni buon editore ha il dialogo Sostituisci, dove in una sotto finestra metti la stringa da sostituire, e nell’altra metti la stringa sostitutiva; infine premi Sostituisci tutto e l’editor provvede a fare tutto il lavoro per te; ci fossero 500 istanze del carattere & da sostituire con \&, l’operazione precedente, una volta scritte le due stringhe nelle rispettive sotto finestre (5 secondi?…) avviene in un tempo irrisorio, forse mezzo secondo, probabilmente di meno.

      • #114636
        Up
        0
        Down
        ::


        Purtroppo con il comando sottostante, viene stampata nel pdf tutta la riga, sforando il margine.
        Mentre io vorrei che venisse tagliata. Ad esempio nel comando sottostante si riesce a visualizzare nel pdf tutta la riga, mentre io vorrei venisse visualizzata solo fino alla lettera z.

        `
        \begingroup \raggedright \ttfamily \obeylines
        aaaaaaaaaa\%aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcdefghilmnopqrstuvzxykjwabcdefghi
        \endgroup
        `

        PS: scusate se non capisco al volo ma sono un po’ inesperto 😆

      • #114637
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Scrivendo con il font teletype si può andare a capo solo senza dividere in sillabe;
          Quindi se usi una riga come quella che hai mostrato, con una “parola” lunghissima, latex (indipendentemente da book) non può tagliare niente. Può tagliare una figura, mostrandone solo una parte, ma non può tagliare righe di testo. Certo si potrebbe trasformare ogni riga in un’immagine e poi lasciare a latex il compito di tagliare la riga, ma compe puoi immaginare la cosa è molto complicata; forse con lualatex si potrebbe fare, ma non è semplice nemmeno con il linguaggio Lua. Io non lo so fare, ma ci sono altri che potrebbero usare Lua per questo scopo.

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

            NP7″ post=115031Buonasera a tutti
            Vi allego innanzitutto il preambolo del mio documento:

            `
            \documentclass[11pt,a4paper,titlepage,twoside,openright]{book}
            \usepackage[english,italian]{babel}
            \usepackage{graphicx}
            \usepackage[utf8]{inputenc}
            \usepackage{amsmath}
            \usepackage{amssymb}
            \usepackage{amsfonts}
            \usepackage[output-decimal-marker={,}]{siunitx}
            \usepackage{booktabs}
            \usepackage{matlab-prettifier}
            \usepackage{fancyhdr}
            \usepackage[binding=1cm]{layaureo}
            \usepackage{lscape}
            \usepackage{caption}
            \usepackage{bookmark}
            \usepackage{xcolor}
            \usepackage{indentfirst} % Prima riga indentata
            \usepackage{hyperref}

            \hypersetup{pdfauthor={bla}, pdfsubject={bla}, pdftitle={bla}, pdfkeywords={bla}}

            \captionsetup{tableposition=top,figureposition=bottom,font=small}

            % comando per eliminare numero pagina e testatine nelle pagine bianche
            \makeatletter
            \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
            \hbox{}
            \thispagestyle{empty}
            \newpage
            \if@twocolumn\hbox{}\newpage\fi\fi\fi}
            \makeatother

            % comando per creare testatine piccole e belle
            \pagestyle{fancy}
            \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
            \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
            \fancyhf{}
            \fancyhead[LE,RO]{\scshape\thepage}
            \fancyhead[LO]{\scshape\footnotesize\nouppercase{\rightmark}}
            \fancyhead[RE]{\scshape\footnotesize\nouppercase{\leftmark}}
            \renewcommand{\headrulewidth}{0.5pt}
            \renewcommand{\footrulewidth}{0pt}
            \addtolength{\headheight}{2.5pt}

            \renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
            \newcommand{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}

            \title{\textsc{Relazione di bla}}
            \author{bla \\ \emph{bla} \\ \mail{bla@bla.it}}

            `

            In questo documento io ho aggiunto delle porzioni di testo dentro l’ambiente “verbatim”.
            In queste porzioni però, le righe sbordano dal magine destro.
            Siccome la parte finale di queste righe non mi interessa, vorrei tagliarle in un solo colpo, in modo che la riga, una volta arrivata al margine,
            si cancelli e lasci spazio bianco oltre il margine.
            Potrei cancellarle “a mano” una per una, ma sono centinaia. 🙁
            Qualcuno sa come fare?
            Grazie

            Ciao.
            A parte che con un buon editor la cosa si riesce a fare in 0.42565486316542165654214 secondi circa,
            puoi mostrare racchiudendo le righe fra tag code, come sono la prima volta e come dovrebbe diventare la seconda?
            R.

          • #114639
            Up
            0
            Down
            ::


            `
            aaaaaaaaaa\%aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcdefghilmnopqrstuvzxykjwabcdefghi
            `

            vorrei che stampasse in pdf lo stesso risultato che dà :

            `
            aaaaaaaaaa\%aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcdefghilmnopqrstuvz
            `

          • #114640
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              La stringa che hai mostrato, e che finisce con z, contiene 70 caratteri contando per due il token \%, e solo 69 token.

              Non capisco dal tuo messaggio se le stringhe lunghe sono tutte della prima forma (quella che prosegue oltre la z) oppure se le stringhe che hai scritto sono solo esempi, ma quelle vere che vuoi troncare sono fatte di normali parole separate da spazi ed eventualmente da segni di interpunzione e altri segni analfabetici.

              Se son stringhe prive di spazi, il problema potrebbe avere una soluzione di un tipo, se sono stringhe di parole separate da spazi il problema potrebbe avere una soluzione di un altro tipo.

              Se la soluzione si può trovare con Lua, forse i 0,45… secondi a cui fa riferimento @robitex si possono raggiungere; forse usando un editor ascii diverso dai soliti shell editor TeXShop, TeXworks, TeXstudio e simili, ma editor speciali come emacs atom, VisualStudioCode, vim, eccetera, si può fare con solo qualche click del mouse, ma non ne sono sicuro (ne ho usati molti nei miei anni, ma non ne ho mai trovato uno che facesse queste cose).

              Con il sistema TeX si può fare senza disturbare Lua; forse con lua si può fare meglio, ma non è impossibile farlo con TeX.

              1) stringa di token: si legge dal file una riga alal volta mettendone i soken in una macro, poi con un’altramacro creata apposta se ne estrae un token alla volta in un’altra macro contando i token estratti in un contatore; arrivati a 69 si termina il ciclo mandando nel file di uscita la seconda macro sviluppata; poi si ricomincia il ciclo su un’altra riga.

              2) stringa di parole: il procedimento è simile, ma si estrae non un token alla volta, ma una parola ala volta; invece di contare i token, si misura la lunhezza della seconda;macro e quando corrisponde a 35em o qualcosina in meno, si manda in uscita la seocnda macro e si ricomincia il ciclo.

              L’idea credo che sarebbe la stessa con Lua.

              Ma come vedi bisogna creare delle macro un po’ particolari; macro con argomenti delimitati che non si definiscono con i comandi di LaTeX ma con i comandi nativi di TeX. Sono macro delicate e il tempo che occorrre per crearle, collaudarle, metterle a punto, eccetera sono tali da far preferire il lavoro manuale.

              Ci sarebbe un’altra strada, poco elegante, ma tutto sommato piuttosto efficace; roba da compositore arrabbiato che ne ha le scatole piene e agisce con violenza 😈 Basta sovrapporre un rettangolo bianco (colorato epr davvero di bianco) sul margine esterno della pagina; bisogna ancorare questo rettangolo bianco al piedino, e metterlo in posizione con i comandi del buon vecchio ambiente picture del nucleo di LaTeX, deve essere ancorato al piedino, perché questo è l’ultimo oggetto che il modulo di costruzione della pagina mette sulla pagina da spedire al file di uscita; per cui il testo c’è già e magari fuoriesce dal margine esterno, e la striscia bianca ne copre la parte che sfora nel margine e lo rendo invisibile.

              Una terza via probabilmente sarebbe quella di usare TikZ; questo programma di disegno taglia automaticamente ciò che fuoriesce dalla tela del disegno; definendo una tela larga quanto la tua giustezza, non dovrebbe essere troppo complicato trattare una riga alla volta con questa tecnica. Richiede un’ottima conoscenza del programma di disegno TikZ.

              Una possibile quarta via potrebbe essere quella di usare le funzioni del linguaggio L3; il sistema TeX Live, penso anche MiKTeX, contiene diversi file di documentazione il cui nome comincia con L3. Questo linguaggio è intermedio fra il linguaggio utente e il linguaggio nativo di TeX; permette di fare un mucchio di cose che il linguaggio utente non può fare, in particolare contiene molte funzioni per trattare le stringhe; non sono abbastanza competente per darti delle dritte per questa soluzione, ma non escludo che ci si riesca con il linguaggio L3.

              Anche in questo caso bisogna ridefinire lo stile della pagina con opportune macro, ma la cosa è molto più semplice rispetto a quella di usare macro ad argomenti delimitati e magari in 5 minuti di programmazione uno se la cava.

              Be’, puoi anche usare il tuo tempo per imparare il linguaggio Lua, ma…

              Comunque, anche questa strada richiede di conoscere bene il funzionamento del programma di composizione; se non sei un neofita probabilmente ci riesci da solo; se sei un neofita lascia perdere, oppure usa il tuo tempo per imparare come si fa, perché la risoluzione di questi problemi insoliti è time consuming, ma insegna un mucchio di cose.

            • #114641
              Up
              0
              Down
              ::

              Non capisco dal tuo messaggio se le stringhe lunghe sono tutte della prima forma (quella che prosegue oltre la z) oppure se le stringhe che hai scritto sono solo esempi, ma quelle vere che vuoi troncare sono fatte di normali parole separate da spazi ed eventualmente da segni di interpunzione e altri segni analfabetici.

              Sono solo esempi, quelle vere che voglio troncare sono fatte di normali parole separate da spazi ed eventualmente da segni di interpunzione e altri segni analfabetici.

              Niente, pensavo ci fossero pochi comandi che facevano al caso mio, purtoppo la “risoluzione” sarebbe più temporalmente lunga di quella a mano.
              Grazie comunque a tutti, siete stati gentili.
              PS: Spero di aver aperto una discussione sfidante!

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

          Go to top