Riferimenti a label “esterne”

  • Creatore
    Topic
  • #91289
    Up
    0
    Down
    ::


    Buon pomeriggio a tutti.
    Ho il seguente problema: devo scrivere ed organizzare un manuale e delle procedure su tre differenti “libri/volumi” diciamo libro1, libro2 e libro3. Ho la necessità di avere dei riferimenti dinamici dall’uno all’altro e cioè: nel libro1 c’è un rimando a un paragrafo/capitolo che si tropva nel libro2 e così via. Esiste secondo voi questa possibilità?

    Potrei farlo manualmente però diventa complicatissimo perchè i riferimenti incrociati sono davvero tanti (oltre un centinaio)…

    Grazie.

Visualizzazione 16 filoni di risposte
  • Autore
    Risposte
    • #91290
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        quattropezze” post=90877Buon pomeriggio a tutti.
        Ho il seguente problema: devo scrivere ed organizzare un manuale e delle procedure su tre differenti “libri/volumi” diciamo libro1, libro2 e libro3. Ho la necessità di avere dei riferimenti dinamici dall’uno all’altro e cioè: nel libro1 c’è un rimando a un paragrafo/capitolo che si tropva nel libro2 e così via. Esiste secondo voi questa possibilità?

        Potrei farlo manualmente però diventa complicatissimo perchè i riferimenti incrociati sono davvero tanti (oltre un centinaio)…

        Grazie.

        Ciao.
        Mi ricordo dell’esistenza di un pacchetto che fa al caso tuo, ma adesso non me ne ricordo il nome…
        R.
        Ps.
        Controlla gli accenti perchè -> perché

      • #91291
        franen
        Partecipante
          Up
          0
          Down
          ::


          prova con il pacchetto xr.
          Fran

        • #91292
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Il pacchetto xr certamente fa al caso tuo, ma per un testo diviso in tre tomi, forse, i rinvii si possono fare anche usando accortamente il gioco di \includeonly e \include. Mantieni tutti i riferimenti e la numerazione di pagine, capitoli note, figure, tabelle, equazioni e via di questo passo. Io trovo questa procedura molto efficace, ma ovviamente non sostituisce completamente quello che si può fare con xr, come xr non sostituisce completamente quello che si può fare con \includeonly e \include; ci sono dei punti di sovrapposizione, ma non coincidono.

            Un unico main file include tutti i capitoli, ma, sempre scrivendo un solo nome di file in ogni riga, una volta compilato tutto il volume i vari file .aux dei vari capitoli contengono tutti i dati per i riferimenti incrociati; dopo basta commentare via via in \includeonly solo le righe del secondo volume e del terzo volume, compilare, ed ecco che il primo volume ha tutti i riferimenti incrociati corretti anche verso gli altri due volumi; poi ripeti commentando le righe che si riferiscono al primo e al terzo volume, e ripeti fino ad aver fatto i tre volumi. Ovviamente fra una compilazione e l’altra devi avere l’accortezza di cambiare nome al file pdf appena composto, affinché non venga sovrascritto con il testo del volume successivo.

            Ho la sensazione che per un lavoro come il tuo, di uno stesso documento diviso in più spezzoni, il procedimento che ti ho indicato sia più farraginoso, che non il procedimento proposto da xr, ma ne hai il pieno controllo e non devi aprire gli altri documenti per conoscere i loro \label a cui fare riferimento nel tuo documento.

            In un caso come il tuo, io preferirei usare il procedimento che ti ho descritto sopra. L’ho fatto per la Guida GuIT in tre tomi e non ho avuto nessun problema. Ho avuto l’accortezza di replicare in tutti e tre i volumi sia la front matter sia la back matter, in modo che sia tutto collegato e in particolare con ogni volume disponi dell’indice generale dell’intera “opera”; così come hai gli indici analitici, la bibliografia, eccetera sempre completi in ogni volume; anche il frontespizio è diverso epr ogni volume, basta agire con accortezza con i tre frontespizi inseriti in tre file distinti e includere il frontespizio giusto con ogni parte dell’intero testo che includi; certo ci vuole un po’ di attenzione, ed è difficile da automatizzare, ma è alla portata di chiunque. Con xr queste cose non si possono fare, ance se non sarebbe difficile farle con altrettanta attenzione rivolta a dettagli diversi.

            Il gioco di \includeonly è documentato nell’Arte di scrivere con LaTeX, nella Guida GuIT, nella guida tematica Il LaTeX Reference Manual commentato, tuti scricabili dalla sezione Documentazione di questo sito.

          • #91293
            Up
            0
            Down
            ::

            robitex” post=90878

            Controlla gli accenti perchè -> perché

            Ho una strana tastiera, pensa che la “ù” è posizionata vicino fra CTRL e <-... Grazie comunque

          • #91294
            Up
            0
            Down
            ::


            Grazie infinite a tutti per l’aiuto.
            Poichè non sono proprio una cima nell’utilizzo di Latex comincerò a studiare la documentazione del pacchetto xr (speriamo non sia solo in inglese, ma …) perchè con l’altro metodo (che credo sia più elegante dal punto di vista della programmazione…) credo che farei chissà quanti pasticci.

            Grazie ancora e vi tengo aggiornati!

            Un abbraccio.

          • #91295
            Up
            0
            Down
            ::


            Buon pomeriggio a tutti.
            Ovviamente non sono riuscito a ottenere un bel niente con il pacchetto xr.
            Ho usato nel preambolo del file chiamato “volume-2” (ad esempio):
            `
            \externaldocument[A-]{appendice}
            `
            e quando dovevo richiamare il label di una tabella
            `
            \ref{A-tab:miatabella}
            `

            Risultato? due bei puntoni interrogativi nel pdf finale…

            Aiuto!

          • #91296
            franen
            Partecipante
              Up
              0
              Down
              ::


              Un esempio minimo compilabile sarebbe sempre gradito.
              Te ne riporto uno (anzi, due) funzionante.
              File Primo.tex:`\documentclass[a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage[utf8]{inputenc}

              \usepackage{xr-hyper}
              \usepackage{hyperref}
              \externaldocument[S-]{Secondo}[Secondo.pdf]
              \begin{document}
              \chapter{Uno}\label{chp:uno}
              \chapter{Due}\label{chp:due}
              Ho letto il capitolo~\ref{S-chp:uno} del secondo tomo.
              \end{document}`File secondo.tex:`\documentclass[a4paper]{book}
              \usepackage[T1]{fontenc}
              \usepackage[utf8]{inputenc}

              \usepackage{xr-hyper}
              \usepackage{hyperref}
              \externaldocument[P-]{Primo}[Primo.pdf]
              \begin{document}
              \chapter{Inizo}\label{chp:uno}
              Ciao
              \chapter{Proseguimento}
              Ho letto il capitolo~\ref{P-chp:due} del primo tomo.

              \end{document}`Ti ho riportato già gli esempi in cui funzionano anche i collegamenti ipertestuali, supponendo possano tornarti utili. Se non ti servissero basta caricare xr anziché xr-hyper e togliere il terzo argomento di \externaldocument.

              Fran

            • #91297
              Up
              0
              Down
              ::


              Grazie!
              E’ vero ma sto correndo e…

            • #91298
              Up
              0
              Down
              ::


              Allora, sto cominciando a provarci ma con scarsi risultati….

              il documento “master” ha il seguente codice:
              `
              \documentclass[a4paper, twoside,10pt]{article}%
              \usepackage{amsmath}%
              \usepackage{amsfonts}%
              \usepackage{amssymb}%
              \usepackage{booktabs}%
              \usepackage{graphicx}
              \usepackage[italian]{babel}%
              \usepackage{textcomp}%
              \usepackage[T1]{fontenc}%
              \usepackage[utf8]{inputenc}%
              \usepackage{float}%
              \usepackage{multirow}%
              \usepackage{lastpage}
              \usepackage[font=small,format=hang]{caption}%labelfont={sf,bf}
              \usepackage{helvet}
              \usepackage{xcolor}
              \renewcommand{\familydefault}{\sfdefault} %————- Font tutto arial
              \graphicspath{img/} %—————————————-posizione grafici
              %%——————————
              \usepackage{geometry}
              \geometry{hmargin={2.5cm,2.5cm},vmargin={2.2cm,2.2cm}}
              \usepackage{fancyhdr}
              \pagestyle{fancy}
              %\topmargin=1pt
              %\headsep = 40pt
              \lhead{\footnotesize{\ditta}}
              \chead{\footnotesize{Sistema Gestione Qualità}}
              \rhead{\footnotesize{++parte del capitolo}}
              \lfoot{}
              \cfoot{\footnotesize{Pagina ~\thepage ~di \pageref{LastPage}}}
              \rfoot{}
              \renewcommand{\headrulewidth}{0.25pt}
              \renewcommand{\footrulewidth}{0.25pt}

              %%—————————-

              %——————————————-label esterne INIZIO \externaldocument[P-]{Primo}
              \usepackage{xr}
              \externaldocument[A-]{manuale1}
              \externaldocument[B-]{manuale2}
              \externaldocument[C-]{manuale3}

              %——————————————-label esterne FINE

              \setlength{\parindent}{0pt} %—————————————–annulla indentazione in tutto il documento

              \begin{document}

              \thispagestyle{empty}
              \tableofcontents
              \newpage
              \include{manuale-1}
              \include{manuale-2}
              \include{manuale-3}

              \end{document}
              `

              Nel file manuale-1.tex ho messo le seguenti label e richiami:

              `
              \section{Introduzione}
              \label{sez:introduzione}
              \subsection{Scopo del documento}
              BLA BLA BLA

              \subsection{Manuale}
              \subsubsection{Generalità}

              BLA BLA BLA COME INDICATO NELLA SEZ.~\ref{B-sez:intro} nel corso del BLòA BLA

              `

              Ma il risultato quando faccio una prima compilazione sono due bei punti interrogativi…

              Dove sbaglio?

              Grazie.

              Saluti.

            • #91299
              Up
              0
              Down
              ::


              Per caso hai già compilato i file [tt]manuale1[/tt], [tt]manuale2[/tt] e [tt]manuale3[/tt]? Se provo a compilare il tuo file di esempio infatti mi avverte con dei warning che non trova i file [tt].aux[/tt] legati a questi tre file. Sono necessari perché in questi file pdfLaTeX memorizza le etichette che tu segni con l’apposito comando.
              Infatti ogni volta che vuoi avere un riferimento incrociato sono necessarie due compilazioni:

              • con una crei il file ausiliario .aux con i riferimenti;
              • con la seconda prendi il file .aux creato in precedenza e usi i riferimenti segnando le pagine.

            • #91300
              Up
              0
              Down
              ::


              No non li ho compilati perchè non essendoci il \begin{document}..\end{document} pensavo non andassero compilati.
              Tuttavia, compilandoli direttamente, mi dà questo errore:

              ! Undefined control sequence.
              l.1 \section
              {Introduzione}

              BOh?

            • #91301
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Secondo me sbagli in questo: tu stai cercado di usare riferimenti verso \label inserite in documento esterni, ma se i tuoi docmenti sono tre file inclusi da comandi ‘include nell’unico master file, questi tre manuale-1, manuale-2 e manuale-3 NON sono documenti esterni.

                Vale sempre il concetto che ti ha spiegato @skevin03; i riferimenti vengono letti dai file .aux, quidi questi devono già essere presenti sel disco in cartelle accessibili al sistema TeX.

                Quindi se usi l’introduzione dei file mediante \include, devi avere già fatto una compilazione; ma c’è un problema: i tre file che includi NON sono esterni, ma interni all’unco documento, quindi i prefissi A-, B- C- sono irrilevanti, perché comunque i \label interni ad uno stesso documento devono essere assolutamante diversi, altiemneti ti esce un errore di Duplicate label.

                Quindi se usi \include non usare il pacchetto xr e non usare i prefissi A-, B-, e C- che non servono a nulla.

                Quando invece vorrai fare riferimento a label generati componendo documenti DIVERSI da quello che stai componendo, allora usa xr e usa i prefissi, perché non è detto che i label usati per comporre documenti DIVERSI, siano anch’essi diversi.

              • #91302
                Up
                0
                Down
                ::


                Non ci ho capito granchè…
                Comunque se compilo i due esempi postati da franen, il tutto funziona…

              • #91303
                franen
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Sì, ma l’esempio che ti ho scritto io è concettualmente diverso dal tuo lavoro:
                  io uso due file completamente indipendenti (così come si era capito dalla tua domanda), poi tu riporti un classico esempio di un unico file che richiama file di testo “esterni”.
                  ma dal momento che tu usi \include è come se il testo contenuto in manuale-1.tex e manuale-2.tex fosse nel file principale. Quindi non ha senso parlare di riferimenti a label esterne!
                  Da’ un nome univoco alle label, non caricare xr e tutto deve funzioanre (guarda il capitolo dell’arte relativo alla struttura di documenti di grosse dimensioni)

                  Fran

                • #91304
                  Up
                  0
                  Down
                  ::


                  ok, ora provo…
                  Se però usassi \input anzichè \include funzionerebbe?

                  Comunque guardo l’Arte…

                  Grazie.

                • #91305
                  Up
                  0
                  Down
                  ::


                  Capo cosparso di cenere…

                  Funziona!

                  Grazie per i suggerimenti e l’aiuto.

                  P.S. Per indicare che tutto è stato risolto debbo modificare io l’oggetto del topic?

                • #91306
                  Up
                  0
                  Down
                  ::

                  quattropezze” post=91243Capo cosparso di cenere…

                  Funziona!

                  Grazie per i suggerimenti e l’aiuto.

                  P.S. Per indicare che tutto è stato risolto debbo modificare io l’oggetto del topic?

                  Ciao
                  Ivan

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

              Go to top