
Я часто обнаруживаю, что копирую и вставляю большие куски {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}