Sistema fácil de posicionamento de figuras

Sistema fácil de posicionamento de figuras

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 placerambiente 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 xparsepara 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}

insira a descrição da imagem aqui

informação relacionada