การวางตำแหน่งโต๊ะ LaTeX


103

ฉันมีเอกสาร LaTeX ที่มีย่อหน้าตามด้วย 4 ตารางตามด้วยย่อหน้าที่สอง ฉันต้องการให้ตาราง 4 ตารางปรากฏระหว่างสองย่อหน้าซึ่งจากสิ่งที่ฉันอ่านหมายความว่าฉันควรใช้ตัวเลือก [h] หลังจากเริ่มต้นสภาพแวดล้อมของตาราง (เช่น\begin{table}[h])

การใช้สิ่งนี้สองตารางแรกจะปรากฏหลังย่อหน้าที่ 1 ตามที่คาดไว้อย่างไรก็ตามย่อหน้าที่ 2 จะแสดงพร้อมกับตารางสองตารางสุดท้ายที่ปรากฏในหน้าถัดไป ฉันจะทำให้ตารางปรากฏในตำแหน่งที่ถูกต้องได้อย่างไร?

ฉันได้ลองทำหลาย ๆ อย่างเพื่อแก้ไขตำแหน่งเช่นการใช้[h!]แต่ดูเหมือนจะไม่มีผลใด ๆ การใช้\clearpageหลังตารางจะมีผลตามที่ต้องการในการทำให้ตารางปรากฏก่อนย่อหน้าที่สอง แต่จากนั้นจะออกจากสองตารางสุดท้ายในหน้าของตัวเองพร้อมกับช่องว่างสีขาวจำนวนมากเมื่อฉันต้องการให้ย่อหน้าที่สองเริ่มต้นทันทีหลังจาก ตาราง

Paragraph 1...

\begin{table}[h]
    table1...
\end{table}

\begin{table}[h]
   table2...
\end{table}[h]
...

Paragraph 2...

ฉันพยายามเช่นกันและมันก็ไม่มีผล
Jared Russell

6
ลำดับของ (ทั้งหมด) ตัวอักษรในอาร์กิวเมนต์ที่เป็นทางเลือกจะไม่มีผล
Will Robertson

@Gacek ฉันพนันได้เลยว่า Will Robertson พูดถูก อ้างอิงจากmintaka.sdsu.edu/GF/bibliog/latex/floats.html "[t] อาร์กิวเมนต์ในวงเล็บบอก LaTeX ว่าสามารถใส่โฟลตได้ที่ไหนคำสั่งของพวกเขาไม่สำคัญ"
Waldir Leoncio

นี่เป็นเพียงเล็กน้อยที่เกี่ยวข้อง แต่ฉันรู้สึกว่าเป็นสิ่งสำคัญที่ต้องรู้: ไม่ควรใช้ตัวเลือก [h] เพียงอย่างเดียวและในความเป็นจริง LaTeX เวอร์ชันใหม่จะแทนที่ด้วย [ht] โดยอัตโนมัติ นั่นอาจเป็นปัญหาของคุณเช่นกัน คุณสามารถอ่านเพิ่มเติมได้ในคู่มือนี้ในหัวข้อ 17.2 "การจัดวางรูป"
vauhochzett

@Gacek [h!]เป็นเวอร์ชันที่ถูกต้อง มันเทียบเท่ากับ[H]. ทั้งสองต้องใช้floatแพคเกจ
winklerrr

คำตอบ:


177

หลังจากทำ googling เพิ่มเติมแล้วฉันก็เจอแพ็คเกจลอยซึ่งช่วยให้คุณป้องกัน LaTeX จากการเปลี่ยนตำแหน่งตาราง

ในคำนำ:

\usepackage{float}
\restylefloat{table}

จากนั้นสำหรับแต่ละตารางคุณสามารถใช้Hตัวเลือกตำแหน่ง (เช่น\begin{table}[H]) เพื่อให้แน่ใจว่าจะไม่ถูกเปลี่ยนตำแหน่ง


23
บางทีควรเน้นว่าควรใช้ "H" ไม่ใช่ "h" นั่นคือสิ่งที่ฉันสังเกตด้วยตัวเอง
bikashg

@bikashg Hเทียบเท่ากับh!(สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ตรวจสอบคำตอบของฉันที่นี่ )
winklerrr

1
ในกรณีที่มีคนใช้โหมดองค์กรให้วางสิ่งนี้ไว้ด้านบน: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} จากนั้น#+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> ขอโทษการจัดรูปแบบขึ้นบรรทัดใหม่ที่ไม่ดีในความคิดเห็น
Gaurav

ขออภัยอ้างว่ามันเป็นสิ่งที่จำเป็นในการทำงาน\restylefloat{table}เพื่อใช้[H]ระบุตำแหน่งที่เป็นเท็จ เพียงหนึ่งเดียวที่เคยควรใช้\restylefloat{table}หากมีการเรียกใช้ครั้งแรกคำแนะนำแพคเกจ\floatstyle, หรือ\floatplacement \floatnameโปรดอัปเดตคำตอบของคุณลบ\restylefloatการอ้างอิงถึง ในกรณีที่คุณต้องการหลักฐานเพิ่มเติมว่าการทำงาน\restylefloatเป็นประจำไม่ได้เป็นความคิดที่ดีไม่เห็นโพสต์คำบรรยายภาพและป้ายชื่อของตารางสองตารางเก็บไว้เคียงข้างถูกกำหนดให้กับตารางอื่น
Mico

26

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

ในตอนต้นด้วยusepackageคำจำกัดความ ได้แก่ :

\usepackage{placeins}

และก่อนและหลังเพิ่ม:

\FloatBarrier
\begin{table}[h]
    \begin{tabular}{llll}
      .... 
    \end{tabular}
\end{table}
\FloatBarrier

ซึ่งจะวางตารางตรงตำแหน่งที่คุณต้องการในข้อความ


นี่เป็นแพ็คเกจที่มีประโยชน์จริงๆ ขอบคุณสำหรับการแบ่งปัน!
John David

17

การวางตำแหน่งโต๊ะ

พารามิเตอร์ที่มี

สามารถวางตารางได้อย่างง่ายดายด้วยพารามิเตอร์ต่อไปนี้:

  • hวางลอยที่นี่กล่าวคือโดยประมาณที่จุดเดียวกันกับที่เกิดขึ้นในข้อความต้นทาง (อย่างไรก็ตามไม่ตรงจุด)
  • tตำแหน่งที่ด้านบนสุดของหน้า
  • bตำแหน่งที่ด้านล่างของหน้า
  • pวางบนหน้าพิเศษสำหรับลอยเท่านั้น
  • ! แทนที่พารามิเตอร์ภายในที่ LaTeX ใช้สำหรับกำหนดตำแหน่งโฟลต "ดี"
  • Hวางลูกลอยในตำแหน่งที่แม่นยำในรหัส LATEX ต้องใช้แพ็คเกจลอย นี่ค่อนข้างเทียบเท่ากับh!.

หากคุณต้องการใช้H(หรือh!) สำหรับตำแหน่งที่แน่นอนตรวจสอบให้แน่ใจว่าคุณได้floatตั้งค่าแพ็คเกจอย่างถูกต้องในคำนำหน้า:

\usepackage{float}
\restylefloat{table}

ตัวอย่าง

หากคุณต้องการที่จะวางตารางในหน้าเดียวกันทั้งในสถานที่ที่แน่นอนหรืออย่างน้อยที่ด้านบนของหน้าเว็บ (สิ่งที่เหมาะกับเครื่องยนต์ที่ดีที่สุดสำหรับน้ำยาง) ใช้พารามิเตอร์hและtเช่นนี้

\begin{table}[ht]
    table content ...
\end{table}

แหล่งที่มา: Overleaf.com


7

จะเกิดอะไรขึ้นถ้าข้อความบวกตารางบวกข้อความไม่พอดีกับหน้าเดียว การพยายามบังคับให้เรียงพิมพ์ด้วยวิธีนี้คุณมีแนวโน้มมากที่จะจบลงด้วยหน้าที่สั้นเกินไป กล่าวคือเนื่องจากตารางไม่สามารถแบ่งหน้าได้ตามค่าเริ่มต้นมันจะถูกผลักไปที่หน้าถัดไปและปล่อยให้มีช่องว่างบนหน้าก่อน คุณจะสังเกตเห็นว่าคุณไม่เคยเห็นสิ่งนี้ในหนังสือที่ตีพิมพ์

พฤติกรรมลอยๆเป็นสิ่งที่ดี! ขอแนะนำให้ใช้[htbp]เป็นค่าเริ่มต้นสำหรับตารางและตัวเลขทั้งหมดจนกว่าเอกสารของคุณจะเสร็จสมบูรณ์ จากนั้นควรคิดถึงการปรับแต่งตำแหน่งที่แม่นยำ

ปล. อ่านคำถามที่พบบ่อย ; คำตอบอื่น ๆ ส่วนใหญ่ที่นี่เป็นคำแนะนำบางส่วนที่ให้ไว้ที่นั่น


1
พฤติกรรมการลอยตัวหลีกเลี่ยงการออกจากที่ว่าง แต่การเคลื่อนย้ายตัวเลขออกไปทำให้ชีวิตของผู้อ่านยากขึ้น ด้วยเหตุนี้ Edward Tufte นักออกแบบคนสำคัญจึงแนะนำให้รวมข้อความและตัวเลข / ตาราง - ในหนังสือที่ตีพิมพ์ของเขาเขาไม่ได้อ้างถึงตารางตามหมายเลข "ดูตาราง 1" ไม่ปรากฏขึ้นเนื่องจากมีตารางอยู่ตรงนั้น เขาแค่จัดวางให้ถูกที่ - กลางประโยค ฉันเดาว่านั่นหมายถึงการทำงานมากขึ้นเพื่อจัดวางตาราง แต่ทำงานน้อยลงสำหรับผู้อ่าน
Blaisorblade

@Blaisorblade - แน่นอนและมีตัวอย่างที่น่าทึ่งอื่น ๆ เช่นกัน แต่ฉันขอเสนอว่าการเขียนข้อความในลักษณะนี้เป็นลำดับความสำคัญที่ยากกว่าสำหรับคนส่วนใหญ่ คุณกำลังพูดถึงการทิ้ง 99% ของการออกแบบหนังสือเพื่อความเหมาะสมที่ไม่น่าเชื่อ พิจารณาประเด็นที่ฉันให้ไว้ในคำตอบของฉัน: 'จะเกิดอะไรขึ้นถ้าตารางไม่สามารถอยู่ใต้ข้อความได้?' ในสถานการณ์ของคุณต้องออกแบบใหม่หรือเขียนใหม่และสิ่งนี้ไม่สามารถป้องกันได้ในหลาย ๆ สถานการณ์
Will Robertson

1
เราเห็นด้วยกับสิ่งที่ดีที่สุดคือ - และใช่ส่วนใหญ่มักจะไม่สามารถทำได้จริง ในชีวิตประจำวันฉันมักจะยึดติดกับลอย แต่ฉันมีตารางเล็ก ๆ และตัวเลขอยู่ในบรรทัดและใช้งานได้ค่อนข้างดี (หากฉันตรวจสอบเวอร์ชันสุดท้ายซึ่งทำได้ง่ายเพราะฉันมีเอกสารไม่เกิน 20 หน้า) ฉันมองว่าการลอยตัวเป็นการแลกเปลี่ยนที่สมเหตุสมผลมากกว่าสิ่งที่ดี :-)
Blaisorblade

อะไรคือความแตกต่างระหว่างการตั้งค่า[htbp]เมื่อเทียบกับไม่มีอะไรเลย?
Waldir Leoncio

@WaldirLeoncio อย่างน้อยสำหรับฉันไม่มีอะไรที่เป็นค่าเริ่มต้น[ht]มากกว่า[htbp]
MrJonas

7

นี่เป็นวิธีง่ายๆจากWikibooks :

แพ็กเกจ placeins มีคำสั่ง \ FloatBarrier ซึ่งสามารถใช้เพื่อป้องกันไม่ให้ลอยเคลื่อนย้าย

ฉันแค่วาง\FloatBarrierก่อนและหลังทุกโต๊ะ


5

หากคุณต้องการมีสองตารางติดกันคุณสามารถใช้: (เมื่อfloatโหลดแพ็คเกจแล้ว)

\begin{table}[H]
 \begin{minipage}{.5\textwidth}
  %first table
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  %second table
 \end{minipage}
\end{table}

แต่ละคนจะมีคำบรรยายภาพและหมายเลขของตัวเอง อีกทางเลือกหนึ่งคือsubfigureแพ็คเกจ


3

คุณอาจต้องการเพิ่มสิ่งนี้ในคำนำของคุณและปรับค่าตามความจำเป็น:

 %------------begin Float Adjustment
%two column float page must be 90% full
\renewcommand\dblfloatpagefraction{.90}
%two column top float can cover up to 80% of page
\renewcommand\dbltopfraction{.80}
%float page must be 90% full
\renewcommand\floatpagefraction{.90}
%top float can cover up to 80% of page
\renewcommand\topfraction{.80}
%bottom float can cover up to 80% of page
\renewcommand\bottomfraction{.80}
%at least 10% of a normal page must contain text
\renewcommand\textfraction{.1}
%separation between floats and text
\setlength\dbltextfloatsep{9pt plus 5pt minus 3pt }
%separation between two column floats and text
\setlength\textfloatsep{4pt plus 2pt minus 1.5pt}

โดยเฉพาะอย่างยิ่ง \ floatpagefraction อาจเป็นที่สนใจ


0

ในการวางคำบรรยายไว้เหนือตารางลอยตัว [H] ให้แทรกคำบรรยายต่อไปนี้ในคำนำหน้า:

\usepackage{float}
\floatstyle{plaintop}
\restylefloat{table}

0

ในกรณีของฉันฉันประสบปัญหาที่ตารางไม่แสดงทันทีหลังจากย่อหน้าที่ฉันแทรกเข้าไปดังนั้นฉันจึงเปลี่ยนไป

\begin{table}[]

ถึง

\begin{table}[ht]

-1

ไม่จำเป็นต้องใช้ \restylefloatและทำลายตัวเลือกอื่น ๆ เช่นตำแหน่งคำอธิบายภาพ เพียงใช้[H]หรือ[!h]หลังจาก\begin{table}นั้น


คำตอบยากที่จะเข้าใจพยายามให้รายละเอียดเพิ่มเติม
Visual Sharp

คำตอบด้านบนบอกว่าให้ใช้ \ usepackage {float} และ \ restylefloat {table} แต่ข้อที่สองไม่จำเป็นและทำให้เกิดปัญหาที่ไม่คาดคิด สิ่งแรกคือสิ่งที่จำเป็น
Michael McGrady
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.