Простая система размещения фигурок

Простая система размещения фигурок

Я часто обнаруживаю, что копирую и вставляю большие куски {figure}кода {table}в свои документы, пытаясь улучшить размещение своих рисунков. Это чревато ошибками и немного раздражает.

Я знаю об аргументе [H] для среды float. Здесь я не пытаюсь сделать так, чтобы позиция float в результирующем документе, например, PDF, точно совпадала с расположением моей среды float. Мне просто нужен более простой способ перемещения кода для float по моему tex-файлу, который не требует копирования и вставки больших кусков кода.

Интересно, можно ли создать какую-то систему с новыми средами и макросами, где я смогу сделать что-то вроде этого?

\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}

Моя идея заключается в том, что новая placerсреда просто фиксирует все и сохраняет это под именем, основанным на теге аргумента.

Затем я помещаю свою фигуру туда, куда хочу, используя новый макрос.

\place{tag}

В идеале было бы возможно использовать\place{tag} довышеприведенный фрагмент кода, и все равно получить желаемый результат. И в идеале, это не будет зависеть от записи файлов или дополнительных шагов компиляции. Я думаю, было бы очень хорошо, если бы по умолчанию float размещался по умолчанию на том \begin{placer}{tag}месте, где \place{tag}он никогда не вызывался.

Возможна ли реализация такой системы?

Если это так, я бы хотел пойти еще дальше. Я бы хотел переопределить среды плавающих элементов Figure и Table, чтобы автоматически кэшировать их содержимое, как указано выше, и чтобы его можно было разместить через макрос Place, как указано выше, используя некоторые метки.

Я мог бы загрузить какой-нибудь пакет, который это реализовал, и начать перемещать рисунки и таблицы по документу, просто добавив команды \place{fig:whatever} с аргументом, соответствующим некоторому тегу соответствующего рисунка. Что-то вроде этого

\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}.

решение1

Вы можете использовать xparseдля определения среды, которая хранит его содержимое. Список свойств, кажется, является подходящим инструментом.

\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}

введите описание изображения здесь

Связанный контент