LaTeX masa konumlandırma


101

Bir paragraf ve ardından 4 tablo ve ardından ikinci bir paragraf içeren bir LaTeX belgem var. 4 tablonun iki paragraf arasında görünmesini istiyorum, bu da okuduğumdan tablo ortamına başladıktan sonra [h] seçeneğini kullanmam gerektiği anlamına geliyor (örn. \begin{table}[h]).

Bunu kullanarak ilk iki tablo beklendiği gibi paragraf 1'den sonra görünür, ancak daha sonra paragraf 2 sonraki sayfada görünen son iki tabloyla görüntülenir. Masaların doğru konumda görünmesini nasıl sağlayabilirim?

Konumlandırmayı düzeltmek için kullanmak gibi çeşitli şeyler denedim, [h!]ancak bunun herhangi bir etkisi yok gibi görünüyor. \clearpageTablolardan sonra kullanmak , tabloların ikinci paragraftan önce görünmesini sağlamak için istenen etkiye sahiptir, ancak daha sonra son iki tabloyu kendi sayfalarında bir sürü boşluk bırakarak, ikinci paragrafın öğeden hemen sonra başlamasını tercih ettiğimde tablolar.

Paragraph 1...

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

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

Paragraph 2...

Bunu da denedim ve hiçbir etkisi olmadı.
Jared Russell

6
İsteğe bağlı bağımsız değişkendeki harflerin (tümünün) sırasının bir etkisi yoktur.
Will Robertson

@Gacek, eminim Will Robertson haklı. Mintaka.sdsu.edu/GF/bibliog/latex/floats.html 'e göre , "[t] parantez içindeki argümanlar, LaTeX'e kayan noktayı nereye koymanın mümkün olduğunu söyler; bunların sırası önemsizdir."
Waldir Leoncio

Bu sadece biraz ilişkili, ancak bilmenin önemli olduğunu düşünüyorum: [h] seçeneği asla tek başına kullanılmamalıdır ve aslında, daha yeni LaTeX sürümleri otomatik olarak [ht] ile değiştirir. Bu senin de sorunun olabilirdi. Bu kılavuzda 17.2 "Şekil Yerleştirme" bölümünde daha fazla bilgi bulabilirsiniz .
vauhochzett

@Gacek [h!]doğru versiyondur. Eşdeğeri [H]. Her ikisi de floatpaketi gerektirir .
winklerrr

Yanıtlar:


174

Biraz daha googling yaptıktan sonra LaTeX'in tabloları yeniden konumlandırmasını engellemenizi sağlayan kayan pakete rastladım .

Önsözde:

\usepackage{float}
\restylefloat{table}

Ardından, her tablo için yeniden konumlandırılmadığından emin olmak için Hyerleştirme seçeneğini (örneğin \begin{table}[H]) kullanabilirsiniz.


23
Belki de "h" nin değil "H" nin kullanılması gerektiğini vurgulamakta fayda var. Kendim için gözlemlediğim buydu.
bikashg

@bikashg Heşdeğerdir h!(parametreler hakkında daha fazla bilgi için cevabımı buradan kontrol edin )
winklerrr

1
Birinin kuruluş modunu kullanması durumunda, bunu en üste koyun: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} Ve sonra, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> yorumlardaki zayıf satırsonu biçimlendirmesini affedin.
Gaurav

Maalesef, konumlandırma belirticisini \restylefloat{table}kullanmak için çalıştırılması gerektiği iddiası yanlış . Bir sadece hiç çalışmalıdır bir birinci paketi talimatlarını tükendi eğer , ya . Referansı kaldırmak için lütfen yanıtınızı güncelleyin . Rutin olarak çalışmanın iyi bir fikir olmadığına dair daha fazla kanıta ihtiyacınız varsa , yan yana tutulan iki tablonun bir tablonun Başlık ve etiketinin başka bir tabloya atandığını görün . [H]\restylefloat{table}\floatstyle\floatplacement\floatname\restylefloat\restylefloat
Mico

25

Bu benim için çalıştı:

usepackageTanımların başında şunları içerir:

\usepackage{placeins}

Ve eklemeden önce ve sonra:

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

Bu, tabloyu tam olarak metinde istediğiniz yere yerleştirir.


Bu gerçekten çok kullanışlı bir paket. Paylaşım için teşekkürler!
John David

15

Masa Konumlandırma

Mevcut Parametreler

Aşağıdaki parametrelerle bir tablo kolayca yerleştirilebilir:

  • hŞamandırayı buraya yerleştirin , yani kaynak metinde yaklaşık olarak aynı noktada (ancak tam olarak yerinde değil)
  • tEn pozisyonu üst sayfasının.
  • bEn pozisyonu alt sayfasının.
  • pYalnızca kayan yerler için özel bir sayfa koyun .
  • ! LaTeX'in "iyi" kayan konumlarını belirlemek için kullandığı dahili parametreleri geçersiz kılın.
  • HŞamandırayı tam olarak LATEX kodundaki konuma yerleştirir. Float paketini gerektirir. Bu biraz eşdeğerdir h!.

Tam bir konumlandırma için H(veya h!) işlevini kullanmak istiyorsanız float, önsözde paketi doğru şekilde ayarladığınızdan emin olun :

\usepackage{float}
\restylefloat{table}

Misal

Tabloyu aynı sayfaya ya tam yerine ya da en azından sayfanın üst kısmına (lateks motoru için en uygun olan) yerleştirmek istiyorsanız, parametreleri kullanın hve tşöyle:

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

Kaynaklar: Overleaf.com


7

Metin artı tablolar artı metin tek bir sayfaya sığmazsa ne olur? Dizgiyi bu şekilde zorlamaya çalıştığınızda, çok kısa çalışan sayfalarla sonuçlanma olasılığınız çok yüksektir; yani, bir tablo varsayılan olarak bir sayfaya bölünemediği için bir sonrakine itilir ve bir önceki sayfada bir boşluk bırakır. Bunu yayınlanmış bir kitapta asla görmediğini fark edeceksiniz.

Yüzen davranış İyi Bir Şeydir! [htbp]Belgeniz tamamlanana kadar tüm tablolar ve şekiller için varsayılan ayar olarak kullanmanızı tavsiye ederim ; ancak o zaman hassas yerleşimlerine ince ayar yapmayı düşünmelidir.

PS SSS'yi okuyun ; buradaki diğer cevapların çoğu, burada verilen tavsiyelerin kısmi kombinasyonlarıdır.


1
Yüzen davranış, boşluk bırakmayı önler, ancak figürleri uzaklaştırmak okuyucu için hayatı zorlaştırır. Bu nedenle, önemli bir tasarımcı olan Edward Tufte, metin ve şekil / tabloların entegre edilmesini önermektedir - yayınlanan kitaplarında tablolara sayı ile atıfta bulunmaz. Tablo tam orada olduğu için "Tablo 1'e bakın" görünmüyor. Onları doğru yere yerleştiriyor - cümlenin ortasına. Sanırım bu, tabloları düzenlemek için daha çok iş yapmak, ancak okuyucular için daha az çalışmak anlamına geliyor.
Blaisorblade

@Blaisorblade - elbette, ve buna benzer başka önemli örnekler de var, ancak bir metni bu şekilde yazmanın, çoğu insan için float kullanmaktan daha zor olduğunu düşünüyorum. Ulaşılamaz bir optimum için kitap tasarımının% 99'unu atmaktan bahsediyorsunuz. Cevabımda belirttiğim noktayı bir düşünün: 'Ya bir tablo metnin altına sığmazsa?' Senaryonuzda yeniden tasarlamanız veya yeniden yazmanız gerekiyor ve bu birçok durumda savunulamaz.
Will Robertson

1
Optimumun ne olduğu konusunda hemfikiriz ve evet, çoğu zaman pratik olarak ulaşılamaz. Günlük yaşamda genellikle yüzen şeylere bağlı kalıyorum. Ancak satır içi küçük tablolarım ve şekillerim var ve oldukça iyi çalışıyor (son sürümü kontrol etsem kolay, çünkü en fazla 20 sayfalık belgelerim var). Yüzmeyi İyi Bir Şeyden ziyade Makul bir Takas olarak görüyorum :-).
Blaisorblade

[htbp]Hiçliğe karşı koymak arasındaki fark nedir ?
Waldir Leoncio

@WaldirLeoncio en azından benim için, hiçbir şey varsayılan olarak bir [ht]yerine[htbp]
MrJonas

7

İşte Wikibooks'tan kolay bir çözüm :

Placeins paketi, kayan değerlerin üzerinde hareket etmesini önlemek için kullanılabilen \ FloatBarrier komutunu sağlar.

\FloatBarrierHer masanın önüne ve arkasına koyuyorum .


4

Yan yana iki tablonun olmasını istiyorsanız şunları kullanabilirsiniz: ( floatpaket yüklüyken)

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

Her birinin kendi başlığı ve numarası olacaktır. Diğer bir seçenek subfigurepakettir.


3

Bunu önsözünüze eklemek ve değerleri gerektiği gibi ayarlamak isteyebilirsiniz:

 %------------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}

Özellikle \ floatpagefraksiyonu ilgi çekici olabilir.


0

Yer başlıkları için yukarıda [H] yerleştirilmiş giriş bölümünde aşağıdaki ekleme, tablolar kayan:

\usepackage{float}
\floatstyle{plaintop}
\restylefloat{table}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.