简易图形放置系统

简易图形放置系统

我经常发现自己在文档中复制粘贴大量{figure}代码,试图改善图表的布局。这很容易出错,而且有点烦人。{table}

我知道浮动环境的 [H] 参数。在这里,我并不是想让结果 PDF 文档中的浮动位置与浮动环境的位置完全匹配。我只想找到一种更简单的方法,在我的 tex 文件中移动浮动代码,而无需复制和粘贴大量代码。

我想知道,是否有可能制作一些具有新环境和宏的系统,我可以在其中执行类似这样的操作

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

我的想法是,新的placer环境只是捕获一切,并使用基于参数标签的名称来保存它。

然后我使用新的宏将我的图形放在我想要的位置

\place{tag}

理想情况下,可以使用\place{tag} \begin{placer}{tag}上面的代码片段,仍然会得到想要的结果。理想情况下,它不会依赖于写入文件或任何额外的编译步骤。我认为如果默认情况下将浮点数放置在从未调用的位置,那就太好了\place{tag}

这样的制度可行吗?

如果是的话,我还会更进一步。我想重新定义图形和表格浮动环境以自动缓存其内容,如上所述,这样就可以使用一些标签通过 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}

在此处输入图片描述

相关内容