[RISOLTO] Codici (listings) su più pagine — float

  • Creatore
    Topic
  • #67802
    Up
    0
    Down
    ::


    Ciao a tutti,
    sto scrivendo una relazione di Matematica Computazionale e ho diversi codici prodotti con MatLab da inserire. Come da ottima guida di Lorenzo utilizzo il pacchetto listings con diverse opzioni (trovate sul web) per ottimizzare la grafica (trovato quì e mi pare davvero un bel lavoro)! A questo punto inserisco i listati nel mio documento direttamente dal file originale con l’utilizzo di \lstinputlisting. Nel caso che il codice oltrepassi la fine pagina si riporta egregiamente e autonomamente a pagina nuova… finché non si chiede che l’oggetto sia fluttuante. Infatti se inserisco `\lstinputlisting[float=htbp]{…}` (l’argomento di float è ininfluente e impostato con solo per esempio) per far si che il LaTeX ottimizzi la disposizione dei codici senza farlo io (che non sono competente in materia :-)) allora ecco che non va più a capo. Il problema si verifica, ovviamente, quando un singolo codice occupa più di una pagina. C’è soluzione? Cioè è possibile chiedere a listings di mandare i codici a pagina nuova, se necessario, e contemporaneamente fare in modo che LaTeX li disponga dove meglio crede lui?
    Ps. per ora ho risolto il problema togliendo qualche linea di commento dai codici e scrivendo più linee in una sola, in modo da fare in modo che il problema non si verifichi. I prossimi codici che scriverò però, visto che non li ho ancora scritti, non so se mi permetteranno questo trucchetto..oltre al fatto che credo sia un’utile informazione per tutti.

    Non credo serva ma riporto comunque il mio preambolo.
    `\documentclass[12pt,
    a4paper,twoside,openright,
    notitlepage,
    fleqn ,
    %draft
    ]{report}

    \usepackage[T1]{fontenc}
    \usepackage[applemac]{inputenc}
    \usepackage[english,italian]{babel}
    \usepackage[babel]{csquotes}
    \usepackage[useprefix,
    style=alphabetic,
    babel=hyphen,
    backref,
    backend=bibtex8,
    hyperref,
    ]{biblatex}
    \bibliography{Bibliografia}
    %\DeclareBibliographyCategory{basi} %crea una sottosezione della bibliografia “basi''
    %\addtocategory{basi}{riferimento1,riferimento2,…} %inserisce voci in quella sezione
    %\defbibheading{basi}{\subsection*{Bibliografia essenziale} %da il titolo a quella sottobibliografia (\section* se report)
    %\DeclareBibliographyCategory{approf} %seconda sottobibliografia….e così via
    %\addtocategory{basi}{riferimento1,riferimento2,…}
    %\defbibheading{approf}{\subsection*{Letture d'approfondimento}}
    %\defbibheading{cartaceo}{\subsection*{Manuali cartacei}} %SENZA DeclareBibliographyCategory né addtocategory
    %\defbibheading{web}{\subsection*{Siti Web consultati}} %

    \usepackage{makeidx}

    \usepackage[binding=7mm]{layaureo}
    \usepackage{microtype}
    \usepackage{pdfpages}
    \usepackage{epstopdf}
    \usepackage{graphicx}
    \usepackage{indentfirst}

    \usepackage{amsmath,amsfonts,amssymb,amsthm,mathrsfs,amscd}

    \usepackage[colorlinks,hyperindex,linkcolor=black,citecolor=black,bookmarks=false,hyperfootnotes=true]{hyperref}
    \hypersetup{
    pdftitle={MioTitolo},
    pdfauthor={Corrado Lanera},
    pdfsubject={MioSoggetto}
    pdfkeywords={MieChiavi}}

    \usepackage[italian]{varioref}

    \usepackage{multicol} %multicolonne in corpo \begin{multicols}{}\emd{multicols}

    \usepackage{syntonly} %permette il controllo della sintassi LaTeX senza produrre output
    \syntaxonly %commentare o meno per non farlo o farlo funzionare

    \usepackage{xspace} %con \xspace si ottiene uno spazio solo se dopo non c'è un segno di interpunzione ovvero dove serve, se serve
    \usepackage{guit} %\GuIT \GuIT* \Ars (il secondo è colorato il primo no)
    \usepackage{eurosym} %\euro (simbolo)
    \usepackage{lipsum} %\lipsum[n] genera n paragrafi di testo finto

    \usepackage{mparhack} %elimina difetti note a margine \marginpar{}
    \usepackage{footnote} %abilita piè di pagina \footnote{} (DOPO il punto fermo!)
    \usepackage{epigraph} %\epigraph{}{\\}

    \usepackage{listings}
    \usepackage{color}
    \usepackage{textcomp}
    \definecolor{listinggray}{gray}{0.9}
    \definecolor{lbcolor}{rgb}{0.9,0.9,0.9}
    \lstset{
    backgroundcolor=\color{lbcolor},
    tabsize=4,
    rulecolor=,
    language=Matlab,
    basicstyle=\scriptsize,
    upquote=true,
    aboveskip={1.5\baselineskip},
    columns=fixed,
    showstringspaces=false,
    extendedchars=true,
    breaklines=true,
    prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
    frame=single,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    identifierstyle=\ttfamily,
    keywordstyle=\color[rgb]{0,0,1},
    commentstyle=\color[rgb]{0.133,0.545,0.133},
    stringstyle=\color[rgb]{0.627,0.126,0.941},
    numbers=left,
    breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
    escapeinside={&!}{!&}
    }
    \addto\captionsitalian{%
    \renewcommand{\lstlistingname}{Codice}}
    \addto\captionsitalian{%
    \renewcommand{\lstlistlistingname}{Elenco dei codici}}

    \graphicspath{{./figure/}} %indirizzo immagini

    \newcommand{\inglese}[1]{\foreignlanguage{english}{#1}} %\inglese{}
    \newcommand{\mail}[1]{\href{mailto:#1}{\texttt{#1}}} %\mail{} (per e-mail)
    %\url{} (per percorso web o file)
    \newcommand{\N}{\mathbb{N}}
    \newcommand{\Z}{\mathbb{Z}}
    \newcommand{\Q}{\mathbb{Q}}
    \newcommand{\R}{\mathbb{R}}
    \newcommand{\C}{\mathbb{C}}
    \newcommand{\registered}{$^{\text{\textregistered}}$\xspace}

    \newcommand{\X}{\mathcal{X}}
    \newcommand{\W}{\mathcal{W}}

    \newenvironment{citazione} %\begin{citazione}…\end{citazione} solo per lunghe citazioni
    {\begin{quotation}\small} %<> dentro il testo
    {\end{quotation}} %\quote fuori testo ma brevi (elimina l'indentazione prima riga)

    \theoremstyle{plain}
    \newtheorem{teorema}{Teorema}[chapter] %[chapter] nei report e nei book, [section] nell'article
    \newtheorem{proposizione}[teorema]{Proposizione}
    \newtheorem{lemma}[teorema]{Lemma}
    \newtheorem{corollario}[teorema]{Corollario}
    \newtheorem{tesi}[teorema]{Tesi}

    \theoremstyle{definition}
    \newtheorem{definizione}[teorema]{Definizione}
    \newtheorem{definizioni}[teorema]{Definizioni}
    \newtheorem{notazione}[teorema]{Notazione}
    \newtheorem{notazioni}[teorema]{Notazioni}
    \newtheorem{esempio}[teorema]{Esempio}
    \newtheorem{esercizio}[teorema]{Esercizio}
    \newenvironment{soluzione}{\begin{proof}[Soluzione]}{\qedhere\end{proof}}

    \theoremstyle{remark}
    \newtheorem{osservazione}[teorema]{Osservazione}
    \newtheorem{osservazioni}[teorema]{Osservazioni}
    \newtheorem{nota}[teorema]{Nota}
    \newtheorem{note}[teorema]{Note}
    `
    ps: è (come) possibile inserire un “\listpath” analogo a \graphicpath?

    Grazie mille.

    Corrado.

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #67803
      Up
      0
      Down
      ::


      “float” e “più pagine” è contraddittorio.

      Se non vuoi inserire sempre il percorso, usa
      `\lstinputlisting[…]{\listati/nome.m}`
      Si può anche costruire un analogo di \graphicspath, ma ne vale la pena?
      `\documentclass[a4paper]{article}
      \usepackage{listings}
      \usepackage{letltxmacro}
      \makeatletter
      \LetLtxMacro\@@lst@inputlisting\lst@inputlisting
      \renewcommand\lst@inputlisting[2][]{%
      \try@listingspath{#2}%
      \if@tempswa
      \typeout{Using \@foundlisting}%
      \@@lst@inputlisting[#1]{\@foundlisting}%
      \else
      \typeout{Missing file #2}\endgroup
      \fi}
      \def\listingspath#1{\def\@listingspath{#1}}
      \listingspath{}
      \def\try@listingspath#1{%
      \@tempswafalse
      \expandafter\@tfor\expandafter\next
      \expandafter:\expandafter=\@listingspath\do
      {\if@tempswa\@break@tfor\fi
      \IfFileExists{\next/#1}{\@tempswatrue\xdef\@foundlisting{\next/#1}}{}}%
      }
      \makeatletter
      \listingspath{{./a}{./b}}
      \begin{document}
      \lstinputlisting{pippo.txt}

      \lstinputlisting{pluto.txt}

      \lstinputlisting{pppxx.txt}

      \end{document}`
      Ciao
      Enrico

    • #67804
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Gli oggetti flottanti, qualunque cosa contengano non possono venire spezzati fra più pagine; nel tuo caso, però direi che te la cavi egregiamente se carichi il pacchetto afterpage ne usi il comando \afterpage così:
        `
        \afterpage{\lstinputlisting{…}
        `

        Per il “\listpath” non ne ho idea; leggi la documentazione di listings con texdoc listings

        Per il tuo preambolo, non caricare i pacchetti che non usi; minimizzi i rischi di conflitti; e non caricare nemmeno i pacchetti che sono già caricati da altri pacchetti (come per esempio amsfonts che è caricato da amssymb).

        Infine hyperref e le sue impostazioni debbono essere caricati e specificate per ultimi, perché esso ridefinisca alcuni comandi, e i pacchetti che carichi dopo potrebbero ridefinirli in modo diverso, Quindi perché i link funzionino è essenziale che hyperref sia caricato per ultimo.

      • #67805
        Up
        0
        Down
        ::

        egreg9″ post=66819
        Se non vuoi inserire sempre il percorso, usa
        `\lstinputlisting[…]{\listati/nome.m}`

        Direi fantastico, grazie. Non avevo mai pensato ad un utilizzo di \newcommand come questo. Direi che questo problema è egreg-iamente risolto 🙂 grazie!

        A riguardo del secondo credo che la soluzione di OldClaudio

        OldClaudio” post=66820Gli oggetti flottanti, qualunque cosa contengano non possono venire spezzati fra più pagine; nel tuo caso, però direi che te la cavi egregiamente se carichi il pacchetto afterpage ne usi il comando \afterpage così:
        \afterpage{\lstinputlisting{…}

        sia un ottimo compromesso (grazie anche per l’implicita correzione fluttuanti-flottanti :-))

        Invece, curiosità,

        egreg9″ post=66819“float” e “più pagine” è contraddittorio.

        in che senso? Cioè chiedere a LaTeX di decidere di mettere un oggetto nel posto che ritiene migliore lasciandogli anche la libertà di spezzarlo dove meglio crede non ha senso (perché prevederebbe una conoscenza del contenuto dell’oggetto da spezzare che LaTeX non ha)? Presenta troppe variabili in gioco? Oppure è “contraddittorio” per qualche altro motivo? (ovvio che è solo una curiosità dato che le opzioni “tolgo il float e lo faccio iniziare dove voglio io e che si spezzi pure a fine pagina” oppure “\afterpage{…} e inizi da pagina nuova, eventualmente spezzandoti se arrivi in fondo” sono più che sufficienti per me :-))

        Intanto segnalo il problema, visto che sono ampiamente soddisfatto, come risolto!

        ps: grazie OldClaudio per le segnalazioni sul mio preambolo, ho già spostato hyperref e poi controllerò con calma tutto quello che mi è davvero necessario (mi ero fatto un pacchettino prefinito per le relazioni :-)) e i pacchetti che richiamano altri pacchetti (andrò a spulciare le guide così ci capirò ancora di più :-)!!)

        Come sempre, GRAZIE.

        Corrado.

      • #67806
        Up
        0
        Down
        ::

        Dork” post=66825Invece, curiosità,

        ”float” e “più pagine” è contraddittorio.

        in che senso?

        Nel senso che il meccanismo dei float in LaTeX non permette che siano su più pagine, tutto qui. Se vuoi riscrivere la routine di output, accomodati. 🙂 🙂 🙂

        Ciao
        Enrico

      • #67807
        Up
        0
        Down
        ::

        egreg9″ post=66826Se vuoi riscrivere la routine di output, accomodati. 🙂 🙂 🙂

        …e perché mai…
        …è bellissima così com’è!!! 🙂

        ps.: visto che girando per il forum ho appena (tre minuti fa) scoperto una cosa che hai fatto tu qualche natale fa (i link di varioref colorati e cliccabili solo nei numeri e non anche nelle parole ) colgo l’occasione per fare a te (e a tutti) tanti auguri 🙂

        grazie ancora!!

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

    Go to top