原 文:`!h’ float specifier changed to `!ht’
譯 者:Xovee
翻譯時間:2020年6月4日
`!h’ float specifier changed to `!ht’
當 LaTeX 在處理浮動元素(例如圖片、表格等)的浮動指示符(例如 \begin{figure}[ht] 中的 ht)時出現了問題,就會拋出這個錯誤。在處理浮動元素時,LaTeX 會將其放置到合適的位置,從而避免正文中出現過大的間隙,或者過於密集的排版。浮動指示符參數可以讓我們指定如何在正文中放置浮動元素,下面是可用的放置選項:
Specifier | Permission |
---|---|
h | h 是 here 的首字母,也就是將浮動元素大致放置在它在正文中出現的地方, |
t | t 是 top 的首字母,也就是將浮動元素放置在頁面的頂部 |
b | b 是 bottom 的首字母,也就是將浮動元素放置在頁面的底部 |
p | p 是 special 的首字母,也就是將浮動元素放置在一個專門放置浮動元素的特殊頁面 |
! | 強制改變 LaTeX 內部制定的 好 的浮動元素的位置標準 |
H | 將浮動元素精確地放置在其在正文中出現的地方。這個參數需要引入 float 包(\usepackage{float} )。這個參數也等價於 h! |
LaTeX 會盡量按着用戶所指定的方式去放置浮動元素,不過有時候也有例外。當 LaTeX 將浮動元素放置在期望的位置時遇到了問題,它可能會選擇另外一種方式去放置浮動元素。當這種情況發生時,會出現類似於下面的報錯信息:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\begin{document}
\section{Introduction}
\vspace{10cm}
\begin{figure}[h]
\centering
\includegraphics{image.PNG}
\end{figure}
\end{document}
對於 LaTeX 來說,h 是一個非常嚴格的參數。爲了解決這個錯誤,你可以放鬆這個限制,例如,將 h 更改爲 ht,也就是說,將浮動元素放置在 here,或者,放置在 top。如果有必要的花,你甚至可以將限制放的更開:htbp 或者 !htbp。
如果你有特殊的需求,將浮動元素精確地放置在頁面的某個地方,你可以選擇如下幾個方案:
使用 float 包:
當我們在序言中使用了 float 包時,我們可以使用一個更強大的指示符 H 來代替 h,H 可以保證浮動元素精確地出現在某個地方。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{float}
\begin{document}
\section{Introduction}
\begin{figure}[H]
\centering
\includegraphics{image.PNG}
\end{figure}
\end{document}
使用 placeins 包:
我們可以使用 placeins 包中的 \FloatBarrier 命令。這個命令會設置一個屏障,浮動元素的位置不能超過這個屏障。如果我們在浮動元素的上下放置這個命令,那麼浮動元素將會困在這兩個屏障之中:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{placeins}
\begin{document}
\section{Introduction}
\FloatBarrier
\begin{figure}
\centering
\includegraphics{image.PNG}
\end{figure}
\FloatBarrier
\end{document}
改變參數:
爲了讓圖片出現在文字之間,而不是章節的末尾(默認),我們可以在序言中更改 float palcement 參數。下面是幾個比較有用的選項:
\renewcommand\topfraction{.9}
\renewcommand\textfraction{0.35}
\renewcommand\floatpagefraction{0.8}