ระบบจัดวางรูปง่าย
ฉันมักจะพบว่าตัวเองคัดลอกและวางชิ้นใหญ่ของ{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: anything} พร้อมอาร์กิวเมนต์ที่สอดคล้องกับแท็กบางส่วนของรูปที่เกี่ยวข้อง อะไรทำนองนี้
\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}.
คำตอบ
คุณสามารถใช้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}