Cambio pagina non desiderato

  • Creatore
    Topic
  • #115534
    Up
    0
    Down
    ::


    Buongiorno a tutti,
    sono nuovo di LaTeX e del forum in generale, quindi spero di non aver sbagliato sezione. Premetto che ho provato a cercare risposta al mio problema (come per altro faccio solitamente), ma questa volta non ho trovato alcun riscontro.

    Ora io sto scrivendo il mio primo “documento serio” in LaTeX, e nello specifico per esercitarmi o scelto un testo con delle parti di codice di programmazione (C++).
    I miei problemi (che non capisco se siano correlati o meno) sono i seguenti:
    1) Nelle parti di codice mi piacerebbe che l’intero blocco fosse nella stessa pagina. Per scrivere le parti di codice utilizzo “Verbatim”, come segue.

    \samepage{
    \begin{Verbatim}

    .. codice ..

    \end{Verbatim}
    }

    per poter tenere il blocco nella stessa pagina utilizzo appunto “samepage”, sebbene abbia provato anche ad utilizzare “nobreakpage”. Il problema nel loro utilizzo sorge in quanto ho notato che quando compilo, non solo il codice viene tenuto nella stessa pagina, ma anche delle parti di testo prima e dopo il “Verbatim”. Tipicamente il capoverso prima e quello dopo, sebbene prima dell’inizio del Verbatim abbia provato a creare un “capoverso a parte” sia lasciando una riga vuota, sia con il comando \par (come suggerito dall’ arte). Mi piacerebbe chiaramente che l’unico “blocco” che rimanga fisso in una pagina sia quello del codice all’interno del Verbatim.

    2) la situazione è sfuggita totalmente di mano quando a un certo punto ho notato che, un codice scritto in questo modo:

    \subsection{titolo}

    …5 righe di testo…

    ..samepage + Verbatim con una decina di righe di codice..

    ..seguono quattro capoversi differenti di diversa lunghezza.

    \subsection{titolo}

    ..6 righe di testo…

    ..altro Verbatim con codice nella solita modalità (cioè con un \samepage che contiene il Verbatim)..

    … ultimo capoverso di qualche riga…

    dà come risultato una cosa del genere:

    \subsection{titolo} + …5 righe di testo… + ..samepage + Verbatim con una decina di righe di codice.. + .. primo dei quattro capoversi… Tutti sulla stessa pagina.

    La pagina finisce (come dovrebbe) e alla pagina successiva compaiono altri 2 capoversi. Poi la pagina termina (sebbene sia appena iniziata, lasciando una pagina quasi vuota), e l’ultimo capoverso della sottosezione viene scritto in una nuova pagina. Dopodichè inizia la nuova sottosezione con il suo testo e il suo codice e termina normalmente.

    A questo punto, quello che ho fatto è stato togliere tutti i \samepage, pensando di non aver capito nulla del comando (e sicuramente è così). Però la situazione non è affatto migliorata. Sebbene in tutti gli altri punti del documento il codice sia interrotto a metà in caso di cambio pagina, nella parte del documento sopra spiegata rimane il “salto” di pagina tra un capoverso e l’altro..

    Spero di essermi spiegato a dovere, grazie in anticipo dell’aiuto.

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #115535
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Intanto benvenuto nel forum.

        Secondariamente mi pare di avere capito che stai usando comandi come \samepage che sono scond=sigliati da tutte le guide. Vabbè, non è grave, tanto più che li hai cancellati tutti.

        Ma il tuo problema deve essere affrontato in un modo completamante diverso; devi mettere i brani di codice in blocchi flottanti o almeno in blocchi non spezzabili a fine pagina. La seonda soluzione è sconsigliabile per vari motivi; se provi a mettere il tuo Verbatim dentro una minipage (ambiente minipage) puoi controllare da solo, visto che stai ancora esercitandoti, per scoprire gli inconvenienti di questa procedura.

        Rendere flottanti i codici, che in generale sono fragilissimi, si può fare in diversi modi:
        1) metti il codice dentro il suo ambiente Verbatim in un file a parte, diciamo codice-1.tex, e lo importi con \input dentro l’argomento di \afterpage; questo comando viene definito nel pacchetto afterpage da richiamare con \usepackage nel preambolo del tuo documento.
        In questo modo \afterpage trattiene il comando \input{codice-1} fino al momento di eseguire il primo salto di pagina, e quindi stampa il codice in modo verbatim solo a partire dalla pagina successiva; nel frattempo il compilatore prosegue compilando il testo con i suoi capoversi e a fine pagina prosegue con il testo dpo l’intero codice se nela pagina rimane spazio sufficiente. per almeno due righe di testo senza creare una riga vedova nella pagina successiva.
        2) una variante del codice precedente è quella di non usare \input ma di mettere direttamente tuttol’ambiente Verbatim con il suo contenuto dentro l’argomento di \afterpage; siccome il codice dentro il Verbatim è fragilissimo, potrebbe non funzionare, ma vale la pena provare.
        3) Caricchi il pacchetto listings e, dopo averne letto le istruzioni, usi il suo ambiente per rendere flottanti i codici.

        In ogni caso colo secondo metodo disponi già del comando caption; con l’altro metodo devi arrangiarti con il comando \captionof. Oppure carichi il pacchetto float e ti definisci un nuovo tipo di float con il suo comando \newfloat. Ovviamante devi leggerne la documentazione perché non è banale. Divi usare il comando \caption per fornire la didascalia a un oggetto che non sia dove andrà a finire e farvi riferimento con un adeguato \label e i comandi \ref e/o \pageref.

        Se non conosci i pochi comandi che ti ho indicato, scaricati dalla sezione documentazione di questo forum il manuale di LaTeX Il LaTeX Reference Manual commentato.

      • #115536
        Up
        0
        Down
        ::


        Grazie mille OldClaudio,

        Ho provato con il primo metodo da te suggerito, ossia ho messo il mio Verbatim{ codice } in un file a parte e l’ho poi importato con \input dentro ad un \afterpage{ }.
        Noto però che come tu hai detto, il compilatore prosegue e mi inserisce il testo successivo fino a riempire la pagina.

        Cioè il mio codice ora è così:

        “Con la seguente sintassi si possono dichiarare \textbf{variabili puntatore}, e allocare o deallocare le corrispondenti aree di memoria nello heap:
        \afterpage{ \input{code01.tex} }
        La prima istruzione crea una variabile \textbf{puntatore a intero} \textit{p} nello stack… ”

        Che appunto mi stampa tutto il testo su una pagina e il mio codice alla pagina successiva. A me piacerebbe sì che il codice rimanesse unito (non diviso dal cambio pagina), ma che fosse anche “nel posto giusto”.
        Per adesso ho risolto semplicemente mettendo \newpage dopo il comando \afterpage, ma mi pare di aver letto che \newpage sia un comando sconsigliato o comunque da usare poco.. Vi è un’alternativa valida ?

      • #115537
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Infatti non divi scrivere “Con la seguente sintassi…”, ma devi scrivere “Con la sintassi mostrata nella pagina~\pageref{codice-1}…”
          e naturalmente nel codice inserito nel file a parte, prima di \begin{verbatim} devi metterci \label{codice-1}. Natiralmente l’etichetta che scegli ppuò essere qualsiasi, ma unica e possibilmente mnemonica dell’oggetto a cui si riferisce.

        • #115538
          Up
          0
          Down
          ::


          Ok grazie infinite, sono andato a rivedermi la parte sui riferimenti incrociati dell’ Arte e ho capito il meccanismo.
          Il problema pare risolto

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

      Go to top