
¿Es posible escalar una tikz
figura al tamaño máximo posible para la página con el texto que está presente usando algunos parámetros? Por ejemplo, ¿existen algunos parámetros tales que
\usepackage{float}
\usepackage{tikz, pgfplots}
\begin{document}
\begin{figure}[H]
\begin{tikzpicture}[scale = **SOMETHING_HERE_TO_AUTO_SCALE_TO_MAX_SIZE_ON_PAGE?**]
% ... code to draw figure
\end{tikzpicture}
\end{figure}
\end{document}
La única forma en que lo he logrado es mediante prueba y error.
Con esto quiero decir que intento
\begin{figure}[H]
\begin{tikzpicture}[scale = 1]
% ... code to draw figure
\end{tikzpicture}
\end{figure}
Cabe en la página, ¿puedo hacerlo más grande? Intentar
\begin{figure}[H]
\begin{tikzpicture}[scale = 2]
% ... code to draw figure
\end{tikzpicture}
\end{figure}
Es demasiado grande, así que lo reduzco.
\begin{figure}[H]
\begin{tikzpicture}[scale = 1.5]
% ... code to draw figure
\end{tikzpicture}
\end{figure}
Ok, encaja de nuevo. ¿Puedo hacerlo más grande?
... etc.
¿Existe una manera fácil para que Latex ajuste automáticamente la imagen al tamaño máximo posible en la página actual con todo el texto, otras figuras, etc. que ya están presentes?
Respuesta1
La figura insertada está "fija" hasta cierto punto. Entonces no uso figure
el entorno ni otro float
entorno.
La idea es simple: calcular la altura restante de la página.
\dimexpr\pagegoal-\pagetotal-#1\relax
#1 es el espacio reservado para center
el entorno y caption
, 4\baselineskip
de forma predeterminada.
Luego ajuste el tikzpicture
al cuadro de ancho \textwidth
y alto \dimexpr\pagegoal-\pagetotal-#1\relax
.
\getpicdimen
se utiliza para obtener el tamaño original de la imagen.\fittobox
se utiliza para ajustar la imagen al cuadro de ancho y alto fijos.\fitremaining
se utiliza para ajustar la imagen al espacio restante de la página.
\documentclass{article}
\usepackage{tikz}
\usepackage{caption}
\usepackage{showframe}
\usepackage{lipsum}
\usetikzlibrary{fit, calc, positioning}
\usepackage{xparse}
\renewcommand*\ShowFrameColor{\color{red}}
\NewDocumentCommand { \getpicdimen } { s O{\picwidth} O{\picheight} +m }
{
\begin{pgfinterruptboundingbox}
\begin{scope}[local bounding box=pic, opacity=0]
\IfBooleanTF {#1}
{ \node[inner sep=0pt, fit=(#4)] {}; }
{ #4 }
\end{scope}
\path ($(pic.north east)-(pic.south west)$);
\end{pgfinterruptboundingbox}
\pgfgetlastxy{#2}{#3}
}
\ExplSyntaxOn
\fp_new:N \l__scale_fp
\NewDocumentCommand { \fittobox } { O{\picwidth} O{\picheight} m m D(){0, 0} +m }
{
\getpicdimen[#1][#2]{#6}
\fp_compare:nTF
{
% pic ratio
\dim_ratio:nn { #1 } { #2 } >
% box ratio
\dim_ratio:nn { #3 } { #4 }
}
{ \fp_set:Nn \l__scale_fp { \dim_ratio:nn { #3 } { #1 } } }
{ \fp_set:Nn \l__scale_fp { \dim_ratio:nn { #4 } { #2 } } }
\begin{scope}[
shift={($(#5) - \fp_use:N \l__scale_fp*(pic.center)$)},
scale=\fp_use:N \l__scale_fp,
nodes={transform~shape},
]
#6
\end{scope}
}
\NewDocumentCommand { \fitremaining } { O{ 4\baselineskip } +m }
{
\fittobox{\textwidth}{\dimexpr\pagegoal-\pagetotal-#1\relax}{#2}
}
\ExplSyntaxOff
\begin{document}
\lipsum[1]
\begin{center}
\begin{tikzpicture}
\fitremaining{
\draw (0, 0) node[left, draw] {$A$} -- (1, 1) node[right, draw] {$B$};
}
\end{tikzpicture}
\captionof{figure}{Test figure}
\end{center}
Some other text.
\clearpage
\lipsum[1-3]
\begin{center}
\begin{tikzpicture}
\fitremaining{
\draw (0, 0) node[left, draw] {$A$} -- (1, 1) node[right, draw] {$B$};
}
\end{tikzpicture}
\captionof{figure}{Test figure}
\end{center}
\clearpage
\end{document}