
Muitas vezes me pego copiando e colando grandes pedaços de {figure}
código {table}
em meus documentos, tentando melhorar o posicionamento de minhas figuras. É propenso a erros e um pouco chato.
Eu conheço o argumento [H] para um ambiente flutuante. Aqui, não estou tentando fazer com que a posição flutuante no documento PDF resultante, por exemplo, corresponda exatamente à localização do meu ambiente flutuante. Eu só quero uma maneira mais simples de mover código para carros flutuantes em meu arquivo tex que não envolva copiar e colar grandes pedaços de código.
Eu me pergunto, será possível fazer algum sistema com novos ambientes e macros, onde eu possa fazer algo assim
\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}
Minha ideia é que o novo placer
ambiente apenas capture tudo e salve com um nome baseado na tag do argumento.
Em seguida, coloco minha figura onde quero usando uma nova macro
\place{tag}
Idealmente, seria possível usar\place{tag}
anteso trecho de código acima e ainda obter o resultado desejado. E, idealmente, não dependeria da gravação de arquivos ou de quaisquer etapas adicionais de compilação. Eu acho que seria muito bom se por padrão o float fosse colocado por padrão no \begin{placer}{tag}
local se \place{tag}
nunca fosse chamado.
Esse tipo de sistema é viável?
Se for, eu gostaria de ir ainda mais longe. Gostaria de redefinir os ambientes flutuantes de figura e tabela para armazenar em cache automaticamente seu conteúdo, como acima, e para que pudesse ser colocado por meio da macro local como acima, usando alguns rótulos.
Eu poderia carregar algum pacote que implementasse isso e começar a mover figuras e tabelas em um documento apenas adicionando os comandos \place{fig:whatever} com o argumento correspondente a alguma tag da figura relevante. Algo assim
\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}.
Responder1
Você pode usar xparse
para definir um ambiente que armazena seu conteúdo. Uma lista de propriedades parece ser a ferramenta apropriada.
\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}