riferimento a label di un plot in ambiente tikzpicture

  • Creatore
    Topic
  • #102683
    Enrico Maria
    Partecipante
      Up
      0
      Down
      ::


      Salve,
      Il problema in cui mi trovo è che non riesco a fare un riferimento, con \ref, al \label di un \plot nell’ambiente tikzpicture contenuto in un file .tikz.
      Il modo in cui ho organizzato i file non è frutto del mio estro artistico, quanto della (forse frettolosa e poco attenta) ricerca sul web di informazioni. Ho deciso di sezionare il lavoro per non perdere la testa in file tex troppo grandi (\include invece di \input forse è sbagliato, ma non credo sia il problema); di esternalizzare le immagini fatte con tikz e pgfplots per non aspettare una lenta compilazione (compilo spesso), le quali immagini sono in formato tikz perché, ora non ricordo se nella documentazione ho altrove, ho letto che vanno salvate così.

      Uso MiKTeX 2.9, aggiornato qualche settimana fa e uso come compilatore Texniccenter

      Questo è pressoché il minimo del main file:
      `\documentclass[a4paper,11pt,twoside]{book}

      \usepackage[english]{babel}
      \usepackage{tikz}
      \usepackage{tikzscale}
      \usepackage{pgfplots}
      %\tikzexternalize[mode=graphics if exists,prefix=Tikz/,shell escape=-enable-write18]
      \pgfplotsset{compat=1.12}
      \usepackage[font=small,format=hang,labelfont={sf,bf}]{caption}
      \usepackage{hyperref}
      \hypersetup{bookmarksopen=true,colorlinks,linkcolor=black,citecolor=black}

      \usetikzlibrary{patterns}
      \usetikzlibrary{external}
      \tikzexternalize[prefix=immagini/externalized/,shell escape=-enable-write18]

      \includeonly{capitolo}

      \begin{document}

      \mainmatter
      \include{capitolo}

      \end{document}`

      Questo è il file tex col capitolo:
      `\chapter{Ci riusciro?}

      Ciao.

      \begin{figure}[h]
      \centering
      \includegraphics{figura.tikz}
      \caption{Didascalia}
      \label{fig:etichetta}
      \end{figure}

      E qui metto il riferimento al plot: \ref{pgf:simbolo}.`

      E questo è il file con l’ambiente tikz:
      `\begin{tikzpicture}
      \begin{axis}
      \addplot {x^2};\label{pgf:simbolo}
      \end{axis}
      \end{tikzpicture}`

      Grazie in anticipo dell’aiuto,
      Enrico

      Attachments:
      You must be logged in to view attached files.
    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #102684
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::



          @Enrico
          , non ho mai esternalizzato un file con tikz, quindi non so se [tt]\includegraphics{figura.tikz}[/tt] sia giusto; occhio e croce direi di no, ma non ho voglia di andare a leggere la documentazione; probabilmente il modo giusto di farlo è [tt]\input{figura.tikz}[/tt] ma non entro nel merito di questa operazione.

          Invece sono perplessissimo del fatto che tu metta un [tt]\label{pgf:simbolo}[/tt] dentro un file incluso o immesso con [tt]\input[/tt].

          Il discorso di \label, \ref, \pagref e simili è che \label memorizza il valore dell’ultimo contatore “referenziabile” che sia stato incrementato e lo memorizza insieme al numero della pagina dove quel comando \label viene eseguito (il che, con gli oggetti mobili, non è la pagina dove ti aspetteresti che si trovi — per l’uso del codice [h] vedi più avanti). Allora se la strategia che hai seguito fosse giusta all’etichetta pgf:simbolo viene associato il numero, probabilmente, della sezione nella quale si trova l’oggetto flottante alla fine della composizione, e il numero di pagina dell’oggetto flottante. Invece l’etichetta fig:etichetta riceve correttamente il numero della didascalia e il numero della pagina dove alla fine si troverà la figura.

          A questo punto mi domando a che cosa serva l’etichetta pgf:simbolo; i plot non vengono numerati ma le didascalie delle figure invece lo sono. Se poi l’esternalizzazione della figura funzionasse, la figura.tikz verrebbe composta in formato pdf e ogni eventuale etichetta che contenesse verrebbe “dimenticata” nel momento in cui il file pdf è completato. anche se l’esternalizzazione cambiasse il modo di funzionare di \input o di altri comandi per importare file esterni per far funzionare \includegraphics in modo da importare il file pdf, l’etichetta pgf:simbolo sarebbe comunque persa.

          Per quanto riguarda il codice di posizione della figura [h], su qualsiasi guida viene scritto di non usarlo o comunque di non usarlo da solo; se LaTeX ha solo [h] come posizione possibile e non lo può mettere lì, non lo può mettere da nessuna altra parte fino alla fine del capitolo o del documento, e bloccherebbe la coda degli oggetti flottanti rendendo il documento quasi illeggibile, in ogni caso frustrando il compositore che quell’immagine la vuole proprio lì.

          Quindi o usi un codice del tipo [htb], oppure non rendi flottate la figura, ma la metti solo dentro una ambiente center e se le vuoi dare una didascalia usi il comando \captionof definito dal pacchetto caption. Tipograficamente parlando le figure vanno messe dove c’è posto, non lì e solo lì.

          Mi spiace di non poterti dire di più sull’estenalizzazione se non di leggere bene la documentazione di TiKZ aprendo un terminale, prompt dei comandi o come si chiama con il tuo sistema operativo Windows, scrivendoci dentro texdoc tikz, premendo il tasto invia e leggendo la documentazione nella finestra che ti si apre (spero che funzioni anche con MiKTeX; con TeXLive funziona sempre; è per questo ed altri motivi che consigliamo sempre di installare TeX Live, ma ovviamente ognuno installa il sistema TeX che preferisce).

        • #102685
          Enrico Maria
          Partecipante
            Up
            0
            Down
            ::

            OldClaudio” post=102579 @Enrico, non ho mai esternalizzato un file con tikz, quindi non so se [tt]\includegraphics{figura.tikz}[/tt] sia giusto; occhio e croce direi di no, ma non ho voglia di andare a leggere la documentazione; probabilmnete il modo giusto di farlo è [tt]\input{figura.tikz}[/tt] ma non entro nel merito di questa operazione.

            A funzionare funziona benissimo (il mio benissimo significa solo 0 errori e 0 warning, null’altro che questo xD), ho già esternalizzato immagini complessissime (sia fatte solo con tikz che con pgfplots). Comunque ho avuto lo stesso dubbio e ho provato anche con include, ma niente.

            OldClaudio” post=102579
            A questo punto mi domando a che cosa serva l’etichetta pgf:simbolo;

            Per poter scrivere ” la curva |simbolo del plot| è relativa al caso 1, mentre quella relativa al caso due è col simbolo ecc ecc”

            Poi non ti seguo più perché le mie conoscenze sono troppo lacunose, credo. Forse ho capito il senso generale: se esternalizzo vuol dire che creo un pdf, quindi da dove li prende i label il povero latex? Mi pare di aver capito dalle guide che in automatico tikz dovrebbe creare altri file aux (o a essi equivalenti)

            OldClaudio” post=102579
            Per quanto riguarda il codice di posizione della figura [h]

            E’ il posizionamento predefinito di texniccenter che uso per creare l’ambiente figure senza dover scrivere begin ecc a mano; è lì per sbaglio, ho dimenticato di toglierlo.

            OldClaudio” post=102579
            Mi spiace di non poterti dire di più sull’estenalizzazione se non di leggere bene la documentazione di TiKZ aprendo un terminale, prompt dei comandi

            E qui casca l’asino! Io sono convintissimo che c’è qualcosa da fare in questo senso. Io ho smanettato con le impostazioni di output dell’editor per usare la forward search, e penso di dover fare qualcosa di analogo, ma mi perdo nella guida di TikZ.. 🙁

            Ho capito che per risolvere il problema dovrei CAPIRE il caso b) della parte “Support for Labels and References In External Files” nel paragrafo 7.1.1 della guida di pgfplots aggiornata al 2015/05/02, ma non riesco proprio a capirci nulla..

            Ho trovato esattamente il mio stesso errore su tex.stackexchange: http://tex.stackexchange.com/questions/175762/label-ref-pair-in-pgfplots-does-not-work-on-running-latex-command-second-time
            Non riesco tuttavia a venire a capo di nulla perché non capisco la proposta soluzione e, quando provo a usarla, dal prompt dei comandi make non è riconosciuto come comando esterno o interno ecc

          • #102686
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Allora mi pare che quanto sta scritto nel paragrafo 7.1.2 si decisamente più semplice ed è quello ce in modo più toruoso ho sempre fatto anch’io.

              Ma non cercare di riferirti a un \label la cui etichetta è definita nella figura.
              Spiega la differenza nella didascalia, oppre dopo aver disegnto le due linee con tratteggi diversi e magari avendo associato una legenda che dica sostanzialmente:

              1: – – – –
              2: -.-.-.-

              dopo puoi riferiti alle due figure dicendo “…la curva 1 della figura \ref{fig:etichetta}…”

            • #102687
              Enrico Maria
              Partecipante
                Up
                0
                Down
                ::

                OldClaudio” post=102581
                Spiega la differenza nella didascalia, oppre dopo aver disegnto le due linee con tratteggi diversi e magari avendo associato una legenda che dica sostanzialmente:
                1: – – – –
                2: -.-.-.-
                dopo puoi riferiti alle due figure dicendo “…la curva 1 della figura \ref{fig:etichetta}…”

                Ma allora la strada tortuosa serve per esternalizzare? Ma io, se non fosse per questo riferimento che volevo fare, non avrei problemi con l’esternalizzazione. Per come ho settato l’output profile in texniccenter e per i pacchetti che ho caricato ecc, l’esternalizzazione va tutta in automatico; se modifico una figura aspetto un po’, se no la compilazione va veloce.

                Per quanto riguarda il tuo consiglio sul riferimento, hai ragione: sfruttare la legenda è davvero l’unico modo per aggirare il problema, almeno finché non risponde qualcuno che sappia muoversi ad una tale profondità nella guida di pgfplots da potermi spiegare che fare.

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

            Go to top