در لاتک حدود ۱۸ تا پارامتر وجود داره که روی نحوه قرارگیری اجسام شناور در صفحه تاثیر میذارن. به عنوان مثال پارامتر \topfraction
که مقدار پیشفرضش، 0.7
هستش، برابر ماکزیمم کسری (درصدی) از صفحه هستش که اجسام شناور میتونن در بالای یک صفحه اشغال کنن.
حالا وقتی شما برای محیط figure
از !
به صورت
\begin{figure}[!t]
...
استفاده میکنید، در واقع به لاتک میگید که اثر اون ۱۸ تا پارامتر رو نادیده بگیر و به حرف من که با آرگومان t
بهت گفتم، گوش کن و جسم شناور رو بالای صفحه قرار بده؛ حتی اگه اون صفحه، صفحه اول یه فصل باشه.
پس اگر در کدتون، !
رو حذف کنید، میبینید که مشکل حل میشه.
اطلاعات بیشتر: بخشهای 6.1 و 6.2 کتاب The LaTeX Companion ویرایش دوم.
ویرایش
معنی \begin{figure}[t]
: ضمن در نظر گرفتن ۱۸ پارامتر مؤثر در نحوه قرارگیری اجسام شناور، اگه برات امکان داره و همه چی اکی بود، این جسم شناور رو بالای صفحه قرار بده.
معنی \begin{figure}[!t]
: بدون هیچگونه توجهی به ۱۸ پارامتر مؤثر در نحوه قرارگیری اجسام شناور، این جسم شناور رو بالای صفحه قرار بده؛ حتی اگه این صفحه، صفحه اول یه فصل باشه.
بذارید چند تا مثال بزنم:
مثال ۱
کد
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\begin{document}
مقداری متن
\begin{figure}[t]
\centering
\includegraphics[height=0.7\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
رو اگه اجرا کنید، میبینید که با وجود فضای خالی کافی در بالای صفحه، شکل در بالای صفحه قرار نمیگیره. دلیلش اینه که مقدار پیشفرض پارامتر \topfraction
، 0.7
هستش؛ یعنی یه جسم شناور اگه بخواد بالای صفحه قرار بگیره، باید حداکثر ارتفاعش + ارتفاع عنوانش، برابر .7\textheight
باشه که در این مثال ما، بیشتر از این مقداره (چون عنوان شکل هم یه فضای عمودی رو اشغال میکنه). خب حالا اگه بخوایم این شکل حتماً بالای صفحه قرار بگیره، دو راه داریم:
۱. مقدار \topfraction
رو زیاد کنیم:
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\renewcommand{\topfraction}{.75}
\begin{document}
مقداری متن
\begin{figure}[t]
\centering
\includegraphics[height=0.7\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
دقت کنید که مقدار مثلاً .71
کارساز نیست؛ چون عنوان شکل هم یه مقدار فضای عمودی اشغال میکنه.
۲. با استفاده از !
، کل اون ۱۸ پارامتر مؤثر از جمله همین \topfraction
رو نادیده بگیریم:
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\begin{document}
مقداری متن
\begin{figure}[!t]
\centering
\includegraphics[height=0.7\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
مثال ۲
کد
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\renewcommand{\topfraction}{1}
\begin{document}
مقداری متن
\begin{figure}[t]
\centering
\includegraphics[height=0.89\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
رو اگه اجرا کنید، میبینید که با وجود فضای خالی کافی در بالای صفحه و گذاشتن مقدار 1
برای پارامتر \topfraction
، باز هم شکل در بالای صفحه قرار نمیگیره. دلیلش اینه که تنها پارامتر مؤثر برای قرارگیری اجسام شناور، \topfraction
نیست. پارامترهای دیگهای از جمله \textfraction
(مینیمم کسر یا درصدی از یک صفحه که باید توسط متن اشغال بشه و مقدار پیشفرضش، 0.2
هستش. به زبان سادهتر، به صورت پیشفرض در لاتک، ۲۰ درصد ارتفاع یک صفحه معمولی باید توسط متن اشغال بشه.) هم مؤثر هستن؛ پس دلیل قرار نگرفتن شکلمون در بالای صفحه اینه که ارتفاعش بیشتر از ۸۰ درصد \textheight
هستش. خب حالا اگه بخوایم این شکل حتماً بالای صفحه قرار بگیره، دو راه داریم:
۱. مقدار \textfraction
رو صفر کنیم؛ یعنی اون مقدار فضای ۲۰ درصدی که برای گذاشتن متن رزرو شده رو حذف کنیم:
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\renewcommand{\topfraction}{1}
\renewcommand{\textfraction}{0}
\begin{document}
مقداری متن
\begin{figure}[t]
\centering
\includegraphics[height=0.89\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
۲. با استفاده از !
، کل اون ۱۸ پارامتر مؤثر از جمله همین \textfraction
رو نادیده بگیریم:
\documentclass{book}
\usepackage{showframe}
\usepackage[demo]{graphicx}
\usepackage{xepersian}
\settextfont{Yas}
\begin{document}
مقداری متن
\begin{figure}[!t]
\centering
\includegraphics[height=0.89\textheight]{000}
\caption{یک شکل نمونه}
\end{figure}
\end{document}
امیدوارم کامل توضیح داده باشم. اگه ابهامی هست، لطفاً بگید تا بیشتر توضیح بدم.