
私はよく、図の配置を改善しようとして、ドキュメントのあちこちに大量のコード{figure}
やテキストをコピーして貼り付けています。これはエラーが発生しやすく、少し面倒です。{table}
フロート環境の [H] 引数については知っています。ここでは、結果の PDF ドキュメントなどのフロート位置をフロート環境の位置と正確に一致させようとしているわけではありません。大量のコードをコピーして貼り付ける必要のない、フロートのコードを tex ファイル内で移動するより簡単な方法が欲しいだけです。
新しい環境とマクロを使って、このようなことができるシステムを作ることは可能だろうか?
\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}
私の考えでは、新しいplacer
環境ではすべてをキャプチャし、引数タグに基づいた名前で保存するだけです。
次に、新しいマクロを使用して、図形を好きな場所に配置します。
\place{tag}
理想的には、\place{tag}
前に上記のコード スニペットを使用しても、目的の結果が得られます。また、理想的には、ファイルの書き込みや追加のコンパイル手順に依存しません。デフォルトで、呼び出されなかった\begin{placer}{tag}
場合は、float がデフォルトでその場所に配置されると非常に便利だと思います。\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}