egreg9″ post=78193
Ciao a tutti,
ho la necessità di inserire molti oggetti flottanti (grafici di [tt]pgfplots[/tt]) ruotati in formato landscape. Inizialmente ho utilizzato il pacchetto [tt]rotating[/tt] con l’opzione [tt]figuresright[/tt], includendo quindi il grafico con l’ambiente [tt]sidewaysfigure[/tt].Mi è stato poi fatto notare che per facilitare la lettura a schermo sarebbe meglio ruotare la visualizzazione di queste pagine. Sono quindi passato al pacchetto [tt]pdflscape[/tt] e l’ambiente [tt]landscape[/tt]:
`
\begin{landscape}
\begin{figure}
\input{my_file}
\caption{Consumi elettrici dell'impianto di condizionamento}
\label{fig:label}
\end{figure}
\end{landscape}
`
in questo modo però l’ambiente [tt]landscape[/tt] inserisce un [tt]\clearpage[/tt] per cui interrompe il flusso del testo.La soluzione è stata quindi usare [tt]\afterpage[/tt]:
`
\afterpage{\begin{landscape}
\begin{figure}
\input{my_file}
\caption{Consumi elettrici dell'impianto di condizionamento}
\label{fig:label}
\end{figure}
\end{landscape}}
`Il risultato è quello voluto. Ora vorrei creare un ambiente (e non un comando) che mi permettesse si ottenere l’effetto de codice precedente; qualcosa del tipo:
`
\begin{mylscape}
\input{my_file}
\caption{Consumi elettrici dell'impianto di condizionamento}
\label{fig:label}
\end{mylscape}
`
solo che non capisco come inserire [tt]\afterpage[/tt] all’interno di [tt]\newenvironment[/tt].C’è qualcuno che può aiutarmi?
Grazie in anticipo
Andrea
Proverei così:
`\usepackage{environ}
\NewEnviron{mylscape}{%
\def\tempmylscape{\begin{landscape}\begin{figure}}%
\expandafter\expandafter\expandafter\afterpage
\expandafter\expandafter\expandafter{\expandafter\tempmylscape\BODY\end{figure}\end{landscape}}%
}`
Con environ e [tt]\NewEnviron[/tt] l’ambiente [tt]mylscape[/tt] mette in [tt]\BODY[/tt] il contenuto dell’ambiente stesso. Ma prima di passarlo a [tt]\afterpage[/tt] dobbiamo espanderlo, perché un semplice
`\afterpage{\begin{landscape}\begin{figure}\BODY\end{figure}\end{landscape}}`
non funzionerebbe: il significato di [tt]\BODY[/tt] sparisce quando l’ambiente è terminato. Con un giudizioso uso di qualche [tt]\expandafter[/tt] (solo sette :)) si otterrà il risultato desiderato.Ciao
Enrico
Ho cantato vittoria troppo presto. Se abilito l’esternalizzazione di [tt]tikz[/tt], il nuovo ambiente ruota solo la pagina, ma non la figura esternalizzata.
Un esempio minimale:
`
\documentclass[a4paper]{book}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp} %Gradi e altri simboli
\usepackage[utf8]{inputenc}
\usepackage{afterpage} %Svuota coda figura \afterpage{\clearpage}
\usepackage{environ} %Nuovi ambienti
\usepackage{lipsum} %Testo casuale
\usepackage{pdflscape} %Rotazione visualizz pagine
\usepackage[figuresright]{rotating} %Rotazione figure
\usepackage{tikz,pgfplots} %Disegno e grafici in LaTeX
\usetikzlibrary{external}
%Definisce nuovo comando per input tile tikz
\makeatletter
\newcommand{\useexternalfile}[1]{%
\tikzsetnextfilename{#1-output}%
\input{\tikzexternal@filenameprefix#1.tex}}
\makeatother
%Figure ruotate
\NewEnviron{mylscape}{%
\def\tempmylscape{\begin{landscape}\begin{figure}\centering}%
\expandafter\expandafter\expandafter\afterpage
\expandafter\expandafter\expandafter %
{\expandafter\tempmylscape\BODY\end{figure}\end{landscape}}%
}
\tikzexternalize %Esternalizzazione
% INIZIO DOCUMENTO
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\tikzsetexternalprefix{./Immagini/cap1/}
\chapter{Primo}
\lipsum
\begin{mylscape}
\useexternalfile{prova}
\caption{Una figura di prova}
\label{fig:my_fig}
\end{mylscape}
\lipsum
\end{document}
`
Dove il file [tt]prova.tex[/tt] è:
`
\begin{tikzpicture}[]
\draw[ultra thick,red] (0,0) rectangle (19,11);
\end{tikzpicture}
`
La figura in [tt]tikz[/tt] viene inserita con [tt]\useexternalfile[/tt] definito in modo da tenere in conto il fatto che il file da inserire è annidato all’interno di sottocartelle nella directory principale ([tt]./Immagini/cap1/[/tt]). Lo stesso comando gestisce anche il prefissi in modo che quando viene attivata la libreria [tt]external[/tt] il file generato venga posizionato nella stessa sotto-cartella del file iniziale.
E’ quindi possibile adattare il nuovo ambiente in modo che posizioni in landscape anche il file esternalizzato?
Grazie in anticipo
Andrea