
我經常發現自己在文件周圍複製和貼上大量{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{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}