Cosa sbaglio con include e input?

  • Creatore
    Topic
  • #81423
    Up
    0
    Down
    ::


    Saluti a tutto il mitico forum.
    Vado subito a bomba: vorrei capire che cosa c’è di errato in quel che ho realizzato. L’anomalia è che di un libro, il solito eserciziario del post precedente, riesco a visualizzare un solo capitolo (metodo includeonly, ecc.), ma i riferimenti incrociati a oggetti presenti in altri capitoli (precedenti e successi) non vengono eseguiti, e figurano come Figura ?? – Esercizio ?? ecc.
    Oramai il libro è andato in stampa, ma mi è rimasta la voglia di capire cosa c’è che non va, perché laddove mi dovesse veramente servire estrarre un solo capitolo dal tutto ora come ora sarebbero guai.
    Per essere sicuro ho compilato oltre 7 volte prima di ordinare la stesura del PDF.

    Vi scrivo il preambolo
    `%% Based on a TeXnicCenter-Template by Tino Weinkauf.
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %———————————————————-
    \documentclass[a4paper,12pt]{book}
    %———————————————————-
    %% Language & FONTS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage[italian]{babel,varioref}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}
    \usepackage{indentfirst}

    %% Packages for Graphics & Figures %%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage{graphicx} %%For loading graphic files
    \usepackage{wrapfig} %Testo attorniato
    \usepackage[titles]{tocloft}
    %% Other Packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \usepackage{a4wide} %%Smaller margins = more text per page.
    \usepackage{hyperref}
    \hypersetup{
    pdftitle={ ######}, % title
    pdfauthor={########}, % author
    pdfsubject={#####}, % subject of the document
    pdfcreator={#######}, % creator of the document
    }
    \usepackage{amsfonts,amsmath,amssymb}
    \usepackage[amsmath,amsthm,thref,hyperref]{ntheorem} %%Pacchetto teorema
    \usepackage{newclude} %%Inclusione di file
    \usepackage{subfig}%
    \usepackage{float}
    \usepackage{longtable} %%Tabelle lunghe.
    \usepackage{multicol} %%Su più colonne.
    \usepackage{multirow} %per le tabelle elaborate
    \usepackage[Lenny]{fncychap} %%Stile capitoli
    \usepackage{fancyhdr} %%Fancy headings
    \usepackage{listings}%
    \lstset{basicstyle=\small, language=[LaTeX]TeX, keywordstyle=\color{black}\bfseries,
    commentstyle=\color{darkgray}, stringstyle=\color{black}}
    \usepackage{url}%
    \usepackage{guit}%
    \usepackage{appendix}%

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% Options / Modifications
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \graphicspath{{foto/}}%Cartella delle foto
    \pagestyle{fancy} %No headings for the first pages.
    \newcommand* \E{\`E \space}
    \renewcommand{\cfttabpresnum}{Tabella\ }
    \setlength{\cfttabnumwidth}{6em}
    \renewcommand{\cftfigpresnum}{Figura\ }
    \setlength{\cftfignumwidth}{5em}
    \setlength\headheight{14.49999pt} % comando per eliminare il warning del pacchetto fancyheader
    \newtheorem{esercizio}{Esercizio}

    % I comandi seguenti impediscono la scrittura in maiuscolo
    % dei nomi dei capitoli e dei paragrafi nelle testatine
    \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
    \renewcommand{\sectionmark}[1]{\markright{\thechapter\ #1}}\fancyhf{} % Rimuove l’attuale contenuto della testatina
    % e del piè di pagina

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% EXTERNAL DOCUMENTS
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %TESTATINE
    %\includeonly{
    %main_testa_frm,
    %main_prefaz,
    %main_testa_int,
    %main_testa
    %}
    %PAGINE INTRODUTTIVE
    %\includeonly{
    %titolo,
    %indici,
    %prefazione
    %}
    %ESERCIZI
    %\includeonly{
    %unitaint,
    %unita,
    %incertezza_int,
    %incertezza,
    %impedenzeint,
    %impedenze,
    %preststat_int,
    %preststat,
    %bode_int,
    %bode,
    %ans_int,
    %ans,
    %immagini_int,
    %immagini,
    %estensimetri_int,
    %estensimetri
    %}

    %APPENDICI
    %\includeonly{domorale,
    %blocchi,
    %bodemath,
    %latexapp
    %}

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% DOCUMENT
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \begin{document}
    \frontmatter

    \include{titolo}
    \cleardoublepage
    \include{indici}
    \cleardoublepage
    \include{prefazione}
    \cleardoublepage

    \mainmatter
    \include{unitaint}
    \cleardoublepage
    \include{unita}
    \cleardoublepage
    \include{incertezza_int}
    \cleardoublepage
    \include{incertezza}
    \cleardoublepage
    \include{impedenzeint}
    \cleardoublepage
    \include{impedenze}
    \cleardoublepage
    \include{preststat_int}
    \cleardoublepage
    \include{preststat}
    \cleardoublepage
    \include{bode_int}
    \cleardoublepage
    \include{bode}
    \cleardoublepage
    \include{ans_int}
    \cleardoublepage
    \include{ans}
    \cleardoublepage
    \include{immagini_int}
    \cleardoublepage
    \include{immagini}
    \cleardoublepage
    \include{estensimetri_int}
    \cleardoublepage
    \include{estensimetri}
    \cleardoublepage

    \begin{appendices}
    \include{appen_testa}
    \include{domorale}
    \cleardoublepage
    \include{blocchi}
    \cleardoublepage
    \include{bodemath}
    \cleardoublepage
    \include{latexapp}
    \cleardoublepage
    \end{appendices}

    \end{document}`

    I capitoli cominciano tutti con un’introduzione (file con finale “int”) e cominaciano tutti così
    `\input{main_testa_int}
    \chapter{Quel che è} \label{ch:zm}`
    ecc.
    in cui il file main_testa_int mi serve per modificare le testatine e il codice è:
    `% I comandi seguenti impediscono la scrittura in maiuscolo
    % dei nomi dei capitoli e dei paragrafi nelle testatine
    %\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
    %\renewcommand{\sectionmark}[1]{\markright{\thechapter\ #1}}\fancyhf{} % Rimuove l’attuale contenuto della testatina
    % e del piè di pagina
    \fancyhead[LE,RO]{\bfseries\thepage}
    \fancyhead[CE,CO]{\bfseries\thechapter\ — \bfseries\leftmark}
    \fancyhead[RE,LO]{}
    \fancyfoot[LE,RO]{}
    \fancyfoot[CE,CO]{}
    \fancyfoot[RE,LO]{}
    \renewcommand{\headrulewidth}{0.5pt}
    %\renewcommand{\footrulewidth}{0 pt}
    \addtolength{\headheight}{0.5pt} % Riserva spazio per la linea
    \fancypagestyle{plain}{%
    \fancyhead{} % Ignora, nello stile plain, le testatine e la linea
    \renewcommand{\headrulewidth}{0pt}}`

    Il file che contiene gli esercizi (nome senza finale in “int”) richiama con “input” all’inizio identico al precedente il file
    “main_testa”
    il cui script è
    `% I comandi seguenti impediscono la scrittura in maiuscolo
    % dei nomi dei capitoli e dei paragrafi nelle testatine
    %\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
    %\renewcommand{\sectionmark}[1]{\markright{\thechapter\ #1}}\fancyhf{} % Rimuove l’attuale contenuto della testatina
    % e del piè di pagina
    \fancyhead[LE,RO]{\bfseries\thepage}
    \fancyhead[CE,CO]{\bfseries\thechapter\ — \bfseries\leftmark}
    \fancyhead[RE,LO]{\scshape\bfseries Esercizio\ \bfseries\theesercizio}
    \fancyfoot[LE,RO]{}
    \fancyfoot[CE,CO]{}
    \fancyfoot[RE,LO]{}
    \renewcommand{\headrulewidth}{1.0pt}
    \addtolength{\headheight}{1.0pt} % Riserva spazio per la linea
    \fancypagestyle{plain}{%
    \fancyhead{} % Ignora, nello stile plain, le testatine e la linea
    \renewcommand{\headrulewidth}{0pt}}`
    Così vario le testatine.
    Tutto il libro è strutturato così.

    Ora se attivando alcuni includeonly, ad esempio
    `%TESTATINE
    \includeonly{
    main_testa_frm,
    main_prefaz,
    main_testa_int,
    main_testa
    }
    %PAGINE INTRODUTTIVE
    \includeonly{
    titolo,
    indici
    %prefazione
    }
    %ESERCIZI
    \includeonly{
    %unitaint,
    %unita,
    %incertezza_int,
    %incertezza,
    %impedenzeint,
    %impedenze,
    preststat_int,
    preststat
    %bode_int,
    %bode,
    %ans_int,
    %ans,
    %immagini_int,
    %immagini,
    %estensimetri_int,
    %estensimetri
    }
    `
    che mi dà il capitolo 5, ottengo il titolo del libro, l’indice (parziale, non completo), un certo numero di pagine bianche, il capitolo 5, ma appunto senza i riferimenti incrociati realizzati.
    Spero di essermi spiegato.
    Grazie

Visualizzazione 9 filoni di risposte
  • Autore
    Risposte
    • #81424
      Up
      0
      Down
      ::


      Ho alcuni dubbi sul fatto che sia lecito usare [tt]\includeonly[/tt] multipli. Ma no, non ti sei spiegato.

      Ciao
      Enrico

    • #81425
      Up
      0
      Down
      ::


      Allora,
      eseguendo il codice che ho scritto per isolare il capilolo 5 (va da pagina 93 a pag 165), ecco cosa salta fuori:
      Titolo posizionato correttamente
      Indice completo
      Indice tabelle, figure ed esercizi corretti e completi

      Pagina 22 bianca ???
      Pagina 26 bianca ???
      Pagina 44 bianca ???
      Pagina 46 bianca ???
      Pagina 78 bianca ???
      Pagina 80 bianca ???
      Capitolo 5 correttameente formattato, ma con i rifeirmenti incrociati esterni al capitolo con ??
      Pagina 170 bianca ???
      Pagina 182 bianca ???
      Pagina 184 bianca ???
      Pagina 194 bianca ???
      Pagina 210 bianca ???
      Pagina 212 bianca ???
      Pagina 218 bianca ???
      Pagina 224 bianca ???

      Le pagine bianche in effetti sono quelle finali di ogni documento include non inserito tramite /includeonly.

      Se l’idea di prevedere il comando /includeonly è quello di poter estrarre una certa parte da un tutto, che senso ha se i riferimenti incrociati esterni poi non vanno? In un contesto di libro scientifico zeppo di formule, tabelle, figure mi sembra assurdo che funzionino solo i riferimenti incrociati interni ai documenti estratti e non quelli verso gli esterni visto che su altre cose dell’insieme se ne tiene conto. Di qui l’idea che sto sbagliando qualcosa, pagine bianche a parte, che sono un altro problema che ho e che ho il fortee sospetto che dipenda dai comandi \cleardoublepage che ho inserito…

    • #81426
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Le pagine bianche dipendono dal fatto che usi \cleardoublepage prima di \include e che i file che includi contengono prima una introduzione/premessa inserita con \input e poi un comando \chapter che a sua volta inserisce un altro \cleardoublepage.

        La soluzione a questo problema consiste nel cominciare il capitolo con l’introduzione/premessa come testo semplice, non preceduto a nessuna comando di sezionamento e poi proseguire all’interno delo stesso capitolo con la prima sezione e poi tutte le altre. Niente \input, insomma e niente \cleardoublepage espliciti o impliciti superflui; se proprio vuoi avere l’introduzione/premessa da sola, metti un \newpage prima della prima sezione.

        Per i riferimenti incrociati: per caso tu esegui la compilazione con uno di quegli script che alla fine cancellano tutti i file ausiliari? Se dopo la compilazione nelle cartelle non ci sono i file aux, quello è il tuo problema; come fa LaTeX a sapere quali sono i riferimenti, se sono stati cancellati i file ausiliari della compilazione precedente?
        Se questa ipotesi fosse vera, ciò che il tuo script di compilazione cancella i file ausiliari dopo la compilazione, allora dovresti avere il problema anche quando compili altri documenti senza l’uso di ‘include. È probabile che la mia ipotesi sia falsa. Tuttavia merita vedere che fine hanno fatto tutti i file aux dei vari file inclusi. Se mancano i riferimenti degli altri capitoli, mancano anche i corrispondenti file aux; questo è certo.

        Segui il consiglio di Enrico; usa una sola lista di \includeonly; nessuno ti vieta di lasciare i commenti tipo %APPENDICI nella debita riga del listone; inoltre metti anche un segno di commento alla fine di ogni nome di file della lista \includeonly; forrse non è più cosi, ma mi ricordo che avevo avuto problemi in passato con lo spazio dopo la virgola. Può darsi che non sia più così, ma non guasta mettere un % anche alla fine di ogni riga.

        Nota che seguendo queste regole io non ho mai avuto problemi nemmeno con testi suddivisi in una trentina di file inclusi con \includeonly e \include.

      • #81427
        Up
        0
        Down
        ::


        Intanto ti ringrazio per la risposta.
        Quanto alle pagine bianche devo ritoccare un po’ i vari file come suggerito. Non appena ho tempo lo faccio e poi ti faccio sapere.
        Per il resto, ho controllato. L’unico file aux che ho è quello relativo al file principale, che fa da progetto. Nessun file aux accompagna i file in /includeonly. Sfido io che i riferimenti non vengano fuori!
        Io lavoro sotto W7 (scusate la bestemmia!) e uso TeXniccenter.
        C’è un sistema per ordinare di lasciare i file aux oppure me la metto via?

      • #81428
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Guarda come è configurato TeXnicCenter e riconfiguralo. Meglio ancora gettalo via e usa qualcosa di più moderno, come TeXstudio, che tra l’altro ha il visualizzarore pdf integrato e sincronizzabile con il sorgente.

          In ogni caso, qualunque editor tu isi non fargli mai cancellare i file di servizio; se li vuoi cancellare fallo tu a mano. Innanzi tutto compial (anche con TeXnicCenter) l’intero libro sens=za commentare nessun nome di file nelle liste \includeonly e senza commentare nellsun \includeonly.
          Poi prosegui come segue.

          Per ora prova ad usare il terminale. Apri il terminale che con W7 dovrebbe aprisrsi seguendo la solita strada (Avvio -> programmi -> Applicazioni -, Prompt dei comandi);cambia directory con il comando cd (change directory) indicando il percorso completo a partire dalla lettera del disco su cui la cartella del tuo libro si trova; scrivi nel terminale [tt]pdflate [/tt] (ovviamente le parentesi acute non ci vogliono ma indicano un argomento che tu devi specificare, il nome del tuo mainfile senza estensione se questa è .tex. Nel terminale compaiono tutti i messaggi che normalmente appaiono anche nel file log. In ogni caso, finita la prima compilazione, verifica la presenza dei vari file aux relativi ai vari file inclusi. Se non ci sono, la colpa, a questo punto, è del fatto che l’unico \includeonly o i vari \includoonly sono commentati.

          Negli includeonly tu selezioni i file da compilare togliendo il segno di commento prima del nome del file da includere, ma senza commentare il comando \includeonly. È questo comando, anche se tutti i sui file sono commentati che assicura che vengano prodotti i file aux dei vari file inclusi.

          A questo punto commenta (sempre con TeCnicCenter) solo i nomi dei file che non vuoi compilare: ripassa al terminale e usando la freccia in su, richiama il comando precedente che è già nella memoria del terminale; ridai il comando di inviao e lascia compilare di nuovo; ora dovresti avere il testo che contiene indici, e riferimenti tutti corretti.

          Se funzuona da terminale, ma non funziona con TeXnicCenter, significa che questo è cofngurato male. Comunque che sia colpa di TeXnicCenter o di altro, ricordati di apssare ad un editor più evoluto; TeXstudio, come ti ho detto, è molto più evoluto e ti lascia il conforto di avere diverse barre di icone da cliccare; A me danno non poco fastidio, ed è per questo che preferisco usare TeXShop sul mio Mac, ma quando ho bisogno di conse particolari uso TeXworks (che hai anche tu avendo caricato sia MiKTeX sia TeXLive [ma non ha creato la scorciatora sul desktop e/o non hai configurato il tuo sistema di file per offrirti un elenco di programmi per aprire qualunque file con il tasto destro e/o usando la voce “Apri con” del menu di partura dei file]). È chiaramente una questione di gusti; quindi non sentirti obbligato a usare TeXworks solo perché ti ho detto che io lo preferisco grazie alla sua mancanza di barre di icone da cliccare 😉 TeXstudio va benissimo e per le macchine Windows direi che sia il migliore oggi fra gli editor freeware.

        • #81429
          Up
          0
          Down
          ::


          Allora, ho fatto come mi hai detto utilizzando pdflatex da terminale. L’ho fatto tre volte di fila, piu che altro per sicurezza e anche perchè magari per evitare che l’errore dipendesse da un insufficientee numero di “lanci”, ma di file aux a parte quello del documento principale neanche l’ombra.
          Insomma, usando nomi generici, c’è
          principale.aux, ma non capitolo5.aux
          Mah.

        • #81430
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Non so che dirti; visto che non ho la sfera di cristallo, dal codice che hai allegato nel primo mail non sono riuscito a trovare altro che l’abbondanza di \cleardoblepage e di separazioni fra le introduzioni e i capitoli veri e propri; non so se hai gia fatto il maquillage di togliere i \clearpage inutili e di incorporare le introduzioni nei capitoli. Comunque controlla ancora che la lista dei file contenuti nell’UNICO \includeonly sia conforme con i file effettivamente nominati negli argomenti degli \include. e riprova.
            Invia anche il file .log per intero; può darsi che lì si riesca a trovare la causa dell’inghippo senza bisogno di usare i metodi degli aruspici.

          • #81431
            Up
            0
            Down
            ::


            ok, domani ti mando il file di log.
            Intanto ti posso anticipare che:
            1) rimuovendo un bel po’ di \cleardoubble, le pagine bianche sono sparite.
            2) il comando \includeonly ora è unico e scritto così (per il solo capitolo 5, preceduto da titolo e indici):
            \includeonly{main_testa_frm,main_prefaz,main_testa_int,main_testa,titolo,indici,capitolo5int,capitolo5}
            A risentirci.

          • #81432
            Up
            0
            Down
            ::


            Ecco il file di log generato con TeXstudio con l’includeonly descritto nel mio intervento precedente (solo cap 5)…

            [attachment=555]misure.rtf[/attachment]

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


              Non ho capito perché hai cambiato estensione al file .log; se hai ti bastava includere direttamente misure.log, senza obbligare chi ti vuole aiutare a cercare come non far aprire il file .rtf a Word, o a Writer, visto che di fatto non è un file rtf. RTF sta per Rich Text Formata, è un formato abbastanza universale, ma ricguarda file con un minimo di formattazione definita con un mark up particolare. Il file log non ha quel formato solo perché gli cambi l’estensione.

              Intanto vedo che usi a4wide; non farlo: è uno dei peccati capitali degli utenti di LaTeX.

              Apparentemente carichi amsfonts prima di amsmath; non è tanto corretto: carica prima amsmath, poi amssymb, poi gli altri file ams, ma non caricare esplicitamante amsfonts, perché viene caricato da amssymb che ha i comandi per accedere a quei font.

              il pacchetto hyperref va caricato per ultimo, in particolare dopo il pacchetto caption, ma comunque per prudenza va caricato sempre per ultimo in assoluto.

              Se puoi evita i file di stile per la pagina iniziale dei capitoli fancychap: di solito produce dei riusltati diversi da quelli standard, ma addirittura meno belli, talvolta delle cose veramente kitsch. quindi evitalo.

              il pacchetto guit carica il pacchetto xcolor. Ricordatene e in particolare non caricare color dopo xcolor e/o non ricaricare xcolor.

              A chi serve il pacchetto nameref; è veramente inutile.

              2) il comando \includeonly ora è unico e scritto così (per il solo capitolo 5, preceduto da titolo e indici):
              \includeonly{main_testa_frm,main_prefaz,main_testa_int,main_testa,titolo,indici,capitolo5int,capitolo5}

              è quello che dici di avere fatto: però nel file .log c’è scritto:
              `(D:\documenti\latex\misureIIed\bode_int.tex
              (D:\documenti\latex\misureIIed\main_testa_int.tex)
              Capitolo 5.`
              senza nessuna menzione del fatto che si sia mai letto il file aux dei file bode_int e bode_text_int

              In altre parole il tuo file misure.log NON contiene nessuna menzione ai file aux dei file subalterni e la pagina 93, non progressiva rispetto alla pagina 12, l’ultima emessa prima di aprire i file su bode, sembra che riceva il suo numero da un \setcounter{page}{92} che non appare esplicitamente né contenuto in un precedente file .aux nè nel file misure.aux.

              Che cosa posso dedurre?

              Che non segui le indicazioni che ti ho dato:
              1) metti un include only che contenga una lista riferita a tutti i file da includere;
              2) fai girare pdflatex almeno un paio di volte;
              3) verifica che il file misure.aux contenga i nomi di tutti i file ausiliari;
              4) verifica che in ogni cartella dove si trovano i file da includere accanto al file incluso ci sia anche il relativo file aux;
              5) se non è così (mancano in file aux) e o mancano i loro nomi nella contenuto del file misure.aux); torna al punto 1) e rifai tutto facendo attenzione di non commettere errori;
              6) cambia la lista di \includeonly in modo che contenga solo i file che ti serve comporre;
              7) fai andare pdflatex;
              8 ) controlla che nel file misure.log siano stati letti tutti i file aux di tutti i file inclusi; ti basta aprire il file log con wordpad.exe ( che hai a bordo del tuo pc anche se non te ne sei mai accorto;non con notepad, perché questo non riconosce i fine riga diversi da quelli standard di Windows; ti consiglio di aprire un terminale [prompt dei comandi] e di dare dalla finestra comandi il comando wordpad misure.log e vedrai che la cosa funziona) e cerca la stringa .aux e dovresti trovarne altrettante associate ai nomi dei file inclusi.
              9) apri il visualizzatore pdf e verifica che tutti i riferimenti incrociati siano a posto.

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

          Go to top