
A menudo me encuentro copiando y pegando grandes fragmentos de {figure}
código {table}
alrededor de mis documentos, tratando de mejorar la ubicación de mis figuras. Es propenso a errores y un poco molesto.
Conozco el argumento [H] para un entorno flotante. Aquí, no estoy tratando de hacer que la posición flotante en el documento PDF resultante coincida exactamente con la ubicación de mi entorno flotante. Solo quiero una forma más sencilla de mover código flotante alrededor de mi archivo tex que no implique copiar y pegar grandes fragmentos de código.
Me pregunto, ¿será posible crear algún sistema con nuevos entornos y macros, donde pueda hacer algo como esto?
\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}
Mi idea es que el nuevo placer
entorno simplemente capture todo y lo guarde con un nombre basado en la etiqueta del argumento.
Luego pongo mi figura donde quiero usando una nueva macro.
\place{tag}
Idealmente sería posible utilizar\place{tag}
antesel fragmento de código anterior y aún así obtener el resultado deseado. E idealmente, no dependería de escribir archivos ni de ningún paso de compilación adicional. Creo que sería muy bueno si, de forma predeterminada, el flotador se colocara de forma predeterminada en el \begin{placer}{tag}
lugar si \place{tag}
nunca se llamara.
¿Es factible este tipo de sistema?
Si es así, me gustaría ir aún más lejos. Me gustaría redefinir los entornos flotantes de figura y tabla para almacenar en caché automáticamente su contenido, como se indicó anteriormente, y así podría colocarse a través de la macro de lugar como se indicó anteriormente usando algunas etiquetas.
Podría cargar algún paquete que implementara eso y comenzar a mover figuras y tablas alrededor de un documento simplemente agregando los comandos \place{fig:whatever} con el argumento correspondiente a alguna etiqueta de la figura relevante. Algo como esto
\usepackage{placer}
\begin{document}
This is a document with one figure.
\begin{figure}
...
\label{fig:whatever}
\end{figure}
Actually, let’s put the figure code below this text.
\place{fig:whatever}.
Respuesta1
Puede utilizar xparse
para definir un entorno que almacene su contenido. Una lista de propiedades parece ser la herramienta adecuada.
\documentclass{article}
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{lipsum} % just for mock text
\ExplSyntaxOn
\prop_new:N \g_innisfree_floats_prop
\NewDocumentEnvironment{placer}{m +b}
{
\prop_gput:Nnn \g_innisfree_floats_prop { #1 } { #2 }
}
{}
\NewDocumentCommand{\place}{m}
{
\prop_item:Nn \g_innisfree_floats_prop { #1 }
}
\ExplSyntaxOff
%%% define the objects (can be in a different file to be \input)
\begin{placer}{fig:example}
\begin{figure}[htp]
\centering
\includegraphics[width=4cm]{example-image}
\caption{A figure\label{fig:example}}
\end{figure}
\end{placer}
\begin{placer}{tab:example}
\begin{table}[tp]
\centering
\caption{A table\label{tab:example}}
\begin{tabular}{lc}
\toprule
X & Y \\
\midrule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}
\end{table}
\end{placer}
\begin{document}
\lipsum[2]
\place{fig:example}
\lipsum[3-5]
\place{tab:example}
\lipsum
\end{document}