[Tutorial] Un pdf interattivo

  • Creatore
    Topic
  • #81215
    Up
    0
    Down
    ::


    Motivazioni[/size=5]

    In questo tutorial si presenteranno due esempi: il primo per far apparire riquadri esplicativi cliccando su alcuni termini del testo mentre nel secondo si prenderà in esame un grafico interattivo, in cui cliccando su un bottoncino si potranno far apparire/scomparire le relative curve.

    L’argomento credo sia abbastanza interessante e merita sicuramente spazio. Esistono diversi strumenti per realizzare un pdf di questo tipo (vedere apposita sezione) sebbene gli esempi saranno realizzati solo con un pacchetto già disponibile nelle distribuzioni correnti.

    Strumenti[/size=5]

    Da quanto conosco, esistono fondamentalmente due strumenti relativamente semplici (poi chi è veramente bravo si può inventare quello che gli pare, come inserire tracce audio http://tex.stackexchange.com/questions/8918/hello-world-in-pdflatex):
    1) il pacchetto ocgx;
    2) il bundle AcroTeX.

    Il secondo permette di ottenere molti più effetti, ma non è disponibile su CTAN e questo, secondo me, è un fattore da tenere in considerazione. Il pacchetto ocgx, invece, essendo disponibile su CTAN è molto più facile da installare perché è sufficiente aggiornare la propria distribuzione. Inoltre, AcroTeX è leggermente più complicato da usare; per chi fosse interessato un paio di riferimenti:
    1) http://tex.stackexchange.com/questions/82336/mouseover-events-in-beamer-hovering-on-eqref-and-a-comment-containing-the-orig;
    2) http://tex.stackexchange.com/questions/84681/interactive-pdf-latex-and-article-of-the-future

    Requisiti[/size=5]

    In questo tutorial viene utilizzato il pacchetto ocgx disponibile su CTAN e nelle distribuzioni TeXLive e MikTeX. Per visualizzare correttamente i pdf è necessario Adobe Reader che supporta Javascript.

    Riquadri esplicativi interattivi[/size=5]

    Per chi ha letto L’introduzione all’uso della macro [tt]tikzmark[/tt], questo esempio si propone lo stesso scopo di quello mostrato in sezione 3.2, ma con una notevole differenza: i riquadri ora possono essere usati anche su documenti che non sono presentazioni perché non c’è necessità di specificare in quali momenti devono apparire. Si consiglia la lettura della guida anche perché la macro [tt]tikzmark[/tt] verrà utilizzata anche in questo caso.

    Il prembolo[/size=3]

    I pacchetti necessari per questo esempio sono: [tt]xparse[/tt] e [tt]tikz[/tt] di cui bisogna caricare le librerie [tt]shapes.callout[/tt] per i riquadri e [tt]ocgx[/tt] per rendereli interattivi.

    I comandi[/size=3]

    I comandi che si occupano del lavoro sporco sono essenzialmente due: [tt]\spiegaparola[/tt] e [tt]\riquadro[/tt]. Analizziamo il primo:`
    % \spiegaparola: #1= idenficatore del bottone e della posizione nel testo , #2 testo da spiegare
    \NewDocumentCommand{\spiegaparola}{r[] m}{
    \switchocg{#1}{#2}\tikzmark{#1}
    }
    ` In sostanza, questo comando crea un bottone con identificatore il primo argomento (richiede le parentesi quadre e non graffe) e verrà azionato cliccando sul secondo argomento che è il termine da spiegare; si è inoltre inserita la macro [tt]\tikzmark[/tt] con identificatore il primo argomento per avere le coordinate del termine, ovvero la sua posizione. Tale posizione sarà il punto di partenza in cui viene creato il riquadro:`
    % \riquadro: #1= opacità, #2= posizione nel testo, #3= testo di spiegazione
    \NewDocumentCommand{\riquadro}{O{opacity=0.8,text opacity=1} m m}{%
    \begin{tikzpicture}[remember picture, overlay]
    \begin{scope}[ocg={ref=#2,status=invisible,name={#3}}]
    \node[my callout style,#1]at (#2) {#3};
    \end{scope}
    \end{tikzpicture}
    }
    ` Si noti come il classico nodo di TikZ che crea veramente il riquadro sia inserito in un ambiente [tt]scope[/tt]: le opzioni passate all’ambiente creano il riferimento con il bottone precedentemente definito attraverso il primo argomento di [tt]\spiegaparola[/tt] (ora è il secondo argomento di [tt]\riquadro[/tt]); inoltre, come spiegato, questo riferimento viene anche utilizzato per posizionare il nodo (si evince da “[tt]at (#2)[/tt]”). Il terzo argomento rappresenta il testo di spiegazione, mentre il primo serve per personalizzare più facilmente la trasparenza del nodo: di default il testo in sfondo continua ad essere visibile.

    Il codice completo[/size=3]

    Ecco l’esempio completo:`
    \documentclass[11pt,a4paper]{article}
    \usepackage{xparse}
    \usepackage{tikz}
    \usetikzlibrary{shapes.callouts,ocgx}

    \newcommand{\tikzmark}[1]{\tikz[overlay,remember picture,baseline=0.5ex] \node (#1) {};}

    % \spiegaparola: #1= idenficatore del bottone e della posizione nel testo , #2 testo da spiegare
    \NewDocumentCommand{\spiegaparola}{r[] m}{
    \switchocg{#1}{#2}\tikzmark{#1}
    }

    \tikzset{my callout style/.style={
    draw,rectangle callout,anchor=pointer,callout relative pointer={(230:1cm)},
    rounded corners,align=center,text width=5cm,fill=cyan!20,
    }
    }

    % \riquadro: #1 opacità, #2 posizione nel testo, #3= testo di spiegazione
    \NewDocumentCommand{\riquadro}{O{opacity=0.8,text opacity=1} m m}{%
    \begin{tikzpicture}[remember picture, overlay]
    \begin{scope}[ocg={ref=#2,status=invisible,name={#3}}]
    \node[my callout style,#1]at (#2) {#3};
    \end{scope}
    \end{tikzpicture}
    }

    \begin{document}
    In una terra lontana, dietro le \spiegaparola[montagna]{montagne} Parole, lontani dalle terre di Vocalia e Consonantia, vivono i testi casuali.
    Vivono isolati nella cittadina di Lettere, sulle coste del Semantico, un immenso oceano linguistico. Un piccolo \spiegaparola[rusc]{ruscello} chiamato Devoto Oli
    attraversa quei luoghi, rifornendoli di tutte le regolalie di cui hanno bisogno. È una terra paradismatica, un paese della \spiegaparola[cuc]{cuccagna} in cui golose
    porzioni di proposizioni arrostite volano in bocca a chi le desideri. Non una volta i testi casuali sono stati dominati dall’onnipotente Interpunzione,
    una vita davvero non ortografica.
    \riquadro{montagna}{Una montagna è un rilievo della superficie terrestre che si estende sopra il terreno circostante in un'area limitata.}
    % sovrascrivere le impostazioni precedenti
    \tikzset{my callout style/.append style={fill=orange!20,,callout relative pointer={(250:0.75cm)}}}
    \riquadro{rusc}{In idrografia viene chiamato ruscello o rio un piccolo corso d'acqua e che confluisce in un corso d'acqua maggiore come dimensione e quantità d'acqua trasportata.}
    \riquadro[opacity=1]{cuc}{Il paese di Cuccagna è un luogo ideale, ricordato in molti testi di ogni epoca, nel quale il benessere, l'abbondanza e il piacere è a portata di tutti.}
    \end{document}
    `
    Il risultato[/size=3]

    Ecco come appare il pdf cliccando sulle prime due parole attive:

    [attachment=544]riquadri.jpg[/attachment]

    Un grafico interattivo[/size=5]

    In questo esempio, lo scopo è di rendere visibili/invisibili determinate curve di un grafico secondo le preferenze dell’utente.

    Il prembolo[/size=3]

    In questo caso solo il pacchetto [tt]pgfplots[/tt] è necessario; siccome [tt]pgfplots[/tt] carica [tt]tikz[/tt] automaticamente, si può caricare la libreria [tt]ocgx[/tt] direttamente.

    Gli stili[/size=3]

    L’esempio non necessita di particolari comandi, ma di due stili: uno per caratterizzare il bottoncino che farà visualizzare/scomparire gli stili e un secondo per garantire un corretto allineamento verticale ai bottoncini. `
    \tikzset{ocg button/.style={circle,inner sep=.25em,switch ocg with mark on={#1}{}}}
    \tikzset{base/.style={baseline=-0.5ex}}
    `
    Il codice completo[/size=3]

    Ecco l’esempio completo: `
    \documentclass[11pt,a4paper]{article}
    \usepackage{pgfplots}
    \usetikzlibrary{ocgx}
    \tikzset{ocg button/.style={circle,inner sep=.25em,switch ocg with mark on={#1}{}}}
    \tikzset{base/.style={baseline=-0.5ex}}
    \begin{document}
    \begin{minipage}[0.4\textheight][l]{0.7\textwidth}
    \begin{tikzpicture}
    \begin{axis}[grid=major, xlabel=$x$, ylabel=$y$]
    \addplot[red,ocg={name=Retta,ref=retta}] {x};
    \addplot[blue,ocg={name=Sin,ref=sin}] {sin(deg(x))};
    \addplot[orange,ocg={name=Cos,ref=cos}] {cos(deg(x))};
    \end{axis}
    \end{tikzpicture}
    \end{minipage}
    \begin{minipage}[0.5\textheight][c]{0.25\textwidth}
    \begin{itemize}
    \item $x$ \tikz[base]\node[fill=red!50,ocg button=retta]{};
    \item $\sin x$ \tikz[base]\node[fill=blue!50,ocg button=sin]{};
    \item $\cos x$ \tikz[base]\node[fill=orange!50,ocg button=cos]{};
    \end{itemize}
    \end{minipage}
    \end{document}
    ` Si è pensato di inserire in due minipage affiancate il grafico e il relativo elenco che permette di scegliere cosa visualizzare. Il trucco è molto semplice: fra le opzioni di [tt]addplot[/tt] si inserisce un livello ocg specificando nome e riferimento; il riferimento, poi viene attivato dal bottoncino attraverso [tt]switch ocg with mark on={#1}{}[/tt].

    Il risultato[/size=3]

    Ecco come appare il pdf nascondendo la retta:

    [attachment=545]plot.jpg[/attachment]

    Ciao
    Claudio

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 0 filoni di risposte
Visualizzazione 0 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top