[L3] Logo grafico da file

  • Creatore
    Topic
  • #81623
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao a tutti,
      in una classe personale ho ola seguente definizione:
      `\newcommand{\logo}[1][1]{%
      \begin{tikzpicture}[line width=0cm,scale=#1]
      \input{logo.def}
      \end{tikzpicture}%`

      Nel file logo.def sono contenute le istruzioni TikZ perché all’epoca trovai questa soluzione per mettere in un unico posto la definizione del logo di base e costruire altri loghi con esso.
      Adesso mi trovo con un documento che contiene un centinaio di schede ciascuna con il logo, così ogni volta viene letto il file rallentando inutilmente la compilazione.

      Ora, vorrei ricreare il comando in LaTeX3, caricando la definizione del logo una sola volta. Come posso fare?
      R.

    Visualizzazione 5 filoni di risposte
    • Autore
      Risposte
      • #81624
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Questo problema è già stato risolto da beamer, dove le figure possono venire dichiarate una volta sola, e poi richiamate da un comando; tipicamante suggerito per inserire il logo su tutti i quadri. Da quello che ho capito, posso essermi sbagliato alla grande, sembrerebbe che la dichiarazione iniziale crei un oggetto PDF interno e che i successivi richiami della figura in realtà la inseriscano solo mediante un link interno all’oggetto creato inizialmente una volta per tutte. L3 non c’entra; ma c’entrano le proprietà del linguaggio PDF usate dietro le quinte attraverso i comandi LaTeX creati per beamer.
          Prova ad esaminare l’interno di beamer e vedi che cosa ha fatto Tantau per realizzare questo schema; sempre che io non abbia preso lucciole per lanterne; io ho solo dedotto quanto ho detto dal manuale di beamer, non dal suo codice. vedi pagina 74: \pgfdeclareimage e \pgfuseimage.

        • #81625
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            OldClaudio” post=80881Questo problema è già stato risolto da beamer, dove le figure possono venire dichiarate una volta sola, e poi richiamate da un comando; tipicamante suggerito per inserire il logo su tutti i quadri. Da quello che ho capito, posso essermi sbagliato alla grande, sembrerebbe che la dichiarazione iniziale crei un oggetto PDF interno e che i successivi richiami della figura in realtà la inseriscano solo mediante un link interno all’oggetto creato inizialmente una volta per tutte. L3 non c’entra; ma c’entrano le proprietà del linguaggio PDF usate dietro le quinte attraverso i comandi LaTeX creati per beamer.
            Prova ad esaminare l’interno di beamer e vedi che cosa ha fatto Tantau per realizzare questo schema; sempre che io non abbia preso lucciole per lanterne; io ho solo dedotto quanto ho detto dal manuale di beamer, non dal suo codice. vedi pagina 74: \pgfdeclareimage e \pgfuseimage.

            Ciao Claudio, il logo viene generato tramite il caricamento di codice contenuto in un file, e non viene generato quindi con il caricamento del logo già composto e disponibile in un pdf.
            LaTeX3 mi serve solo per impararlo un po’.
            L’idea era quella di caricare il codice dal file una volta sola e salvarlo in una variabile token da espandere all’interno del comando.
            Più che altro si tratta di un’esercitazione con L3 visto che posso benissimo copiare ed incollare il codice dal file di definizione e creare un comando direttamente all’interno del sorgente del documento. 🙂

            Caricare un pdf molte volte e farlo gestire in realtà un unica volta come link nel pdf è un abilità che graphicx fa meglio di PGF come dichiara il manuale.
            R.

          • #81626
            Up
            0
            Down
            ::


            Non è questione di LaTeX3: la cosa più semplice è costruirselo in una box e poi scalare quella:
            `\newsavebox{\logobox}
            \sbox{\logobox}{%
            \begin{tikzpicture}[line width=0cm,scale=#1]
            \input{logo.def}
            \end{tikzpicture}%
            }
            \newcommand{\logo}[1][1]{%
            \scalebox{#1}{\usebox{\logobox}}%
            }`
            Ciao
            Enrico

          • #81627
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::

              egreg9″ post=80884Non è questione di LaTeX3: la cosa più semplice è costruirselo in una box e poi scalare quella:
              `\newsavebox{\logobox}
              \sbox{\logobox}{%
              \begin{tikzpicture}[line width=0cm,scale=#1]
              \input{logo.def}
              \end{tikzpicture}%
              }
              \newcommand{\logo}[1][1]{%
              \scalebox{#1}{\usebox{\logobox}}%
              }`
              Ciao
              Enrico

              Già, un box verrebbe definito con la lettura di un file e poi utilizzato come contenitore.
              Ho dato un occhiata al modulo file di L3. Immaginavo ci fosse una funzione per trasferire l’intero contenuto di un file in una variabile token.
              Lo si può fare scrivendo codice ad hoc, probabilmente.
              Grazie.
              R.

            • #81628
              Up
              0
              Down
              ::

              robitex” post=80885

              Non è questione di LaTeX3: la cosa più semplice è costruirselo in una box e poi scalare quella:
              `\newsavebox{\logobox}
              \sbox{\logobox}{%
              \begin{tikzpicture}[line width=0cm,scale=#1]
              \input{logo.def}
              \end{tikzpicture}%
              }
              \newcommand{\logo}[1][1]{%
              \scalebox{#1}{\usebox{\logobox}}%
              }`
              Ciao
              Enrico

              Già, un box verrebbe definito con la lettura di un file e poi utilizzato come contenitore.
              Ho dato un occhiata al modulo file di L3. Immaginavo ci fosse una funzione per trasferire l’intero contenuto di un file in una variabile token.
              Lo si può fare scrivendo codice ad hoc, probabilmente.
              Grazie.
              R.

              Pacchetto catchfile; non c’è, attualmente, un analogo in LaTeX3.
              `\usepackage{catchfile}
              \CatchFileDef{\mylogoinstructions}{logo.def}{}
              \newcommand{\logo}[1][1]{%
              \begin{tikzpicture}[line width=0cm,scale=#1]
              \mylogoinstructions
              \end{tikzpicture}%
              }`
              Ciao
              Enrico

            • #81629
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::

                Caricare un pdf molte volte e farlo gestire in realtà un unica volta come link nel pdf è un abilità che graphicx fa meglio di PGF come dichiara il manuale.

                Io non escludo che in beamer i comandi \pgfdeclareimage e \pgfuseimage non ricorrano a graphicx che, comunque, viene caricato da beamer. Né escludo che quei due comandi non facciano uso di una scatola intermedia da caricare inizialmente con l’immagine e poi da usare come se si trattasse di un \usebox. Come ti ho detto non ho letto il codice.
                Comunque il concetto di usare una scatola vale sia per un file grafico sia per un disegno fatto sul momento come ti ha mostrato Enrico.

                Capisco il tuo desiderio di imparare LaTeX3 e fai benissimo a porti dei problemi e a risolverli con L3. Tuttavia anche ridisegnare ogni volta il disegno Tikz, la cui macro fosse stivata in un token register attraverso qualche magia di L3, non mi sembra efficiente. Mi sembra più efficiente l’uso della scatola.

                Anche con il registro scatola, cioè un registro il cui contenuto sia, in questo caso, di tipo grafico, non so quanto sia laborioso, in termini di tempi macchina, copiare il suo contenuto all’esterno (\usebox di LaTeX equivale a \copybox di TeX) cioè nel file da mandare in output. Non ho mai avuto la pazienza di leggere il codice sorgente in linguaggio web del motore di composizione, quindi non ho idea di quello che succede dietro le quinte. Ma certamente lavorare con i registri è molto più rapido che non leggere da disco.

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

            Go to top