اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
Close Sidebar
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

محبوب‌ترین برچسب‌ها

رفع خطا جدول مراجع xepersian ریاضی‌نویسی شکل فونت فهرست مطالب شماره‌گذاری منابع bidi پانویس بیب‌تک parsilatex تک‌لایو tikz اسلاید بیمر زی‌پرشین پاورقی سربرگ bibtex نماد رسم شکل قالب فرمول‌نویسی ارجاع‌دهی biditexmaker هدر ویرایشگر beamer واژه‌نامه اندازه فونت texstudio ماتریس عنوان فصل اعمال نشدن تغییرات در پی‌دی‌اف bidipresentation رسم جدول حاشیه شماره صفحه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف مکان شکل tikzpicture حروف‌چینی کد شماره فصل tabriz_thesis enumerate زیرنویس شکل کادر align نمایه itemize listings الگوریتم بسته نیم‌فاصله متن لاتین و فارسی عدم اجرا فهرست اشکال فاصله بین خطوط نصب تک‌لایو فارسی‌تک hyperref شماره فرمول فرمول glossaries قالب پایان‌نامه حروف‌چینی چندستونی فونت فارسی و انگلیسی نمودار خروجی biditools ماکرونویسی کپشن پیوست‌ فاصله‌گذاری فرمول چندضابطه‌ای سوال امتحانی subfigure header شماره پاورقی tex لاتک biditufte-book texmaker تصویر texlive2015 میک‌تک pdf شمارنده زیرنویس خطا شماره‌گذاری صفحات دیاگرام texlive2016 فهرست جداول رسم نمودار تنظیم جدول longtable texworks caption اندیس extrafootnotefeatures lollipop iust-thesis multicol فصل‌نویسی kashida سوال چهارگزینه‌ای قاب تورفتگی آکولاد فاصله عمودی پایان نامه xindy چپ‌چینی اوبونتو شعر میکروسافت ورد بولد geometry fancyhdr تک لایو 2015 به‌روزرسانی بسته اعداد فارسی aimc46 فرمول طولانی بیرون‌زدگی کاما وسط‌چینی عنوان بخش پوستر فاصله سطرها نوشتافت شکست خط tex-programming قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس texlive فلش جایابی تصویر tcolorbox صفر توخالی قالب کتاب پاراگراف‌بندی فونت اعداد pgfplots بازیابی اطلاعات فهرست نمادها شمارنده فصل محیط ریاضی رسم کادر xelatex جداکننده جدول طولانی شماره‌گذاری فرمول هایپرلینک algorithm2e proof eps جدول افقی پانویس چندستونی فهرست تصاویر شماره گذاری کمک مالی فاصله خطوط حروف‌چینی شعر فونت بولد زیرشکل equation bidipoem عکس ltrfootnote پیوست computeautoilg به‌روزرسانی فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان minipage قلم پانویس پاراگرافی baselineskip شماره قسمت قسمت عنوان جدول متن فارسی و انگلیسی قالب مجله xebaposter bidihl
2 نفر آنلاین
0 عضو و 2 مهمان در سایت حاضرند
بازدید امروز: 964
بازدید دیروز: 5403
بازدید کل: 15248529

محاسبه‌ی خودکار headheight توسط بسته‌ی fancyhdr مطابق با اندازه‌ی هدر هر صفحه

+1 رای
439 بازدید

بسته‌ی fancyhdr بصورت خودکار اندازه‌ی headheight را تغییر نمی‌دهد بلکه اگر headheight کمتر از مقدار مورد نیاز باشد هشداری را صادر می‌کند و اندازه اتفاع هدر باقی صفحات را تغییر می‌دهد.
چگونه‌می‌توان در هر صفحه headheight دقیقا به اندازه مقدار مورد نیاز همان صفحه باشد؟ یعنی مثلا اگر در صفحه پنجم ارتفاع هدر 60 پوینت باشد مقدار headheight در صفحه پنجم نیز 60 پوینت باشد.

فایل‌های پیوست
سوال شده دی 28, 1397 توسط مجتبی (587 امتیاز)
ویرایش شده دی 28, 1397 توسط مجتبی

4 پاسخ

+2 رای

این پاسخ با توجه به پرسش بروز شده و تغییر در متن پرسش است. این پاسخ تنها این کار را برای header انجام می‌دهد. نحوه انجام این کار برای footer مشابه است.

ایده اصلی این است که در output routine قبل از اینکه header در هر صفحه حروف‌چینی شود محتوای کادر 0 در دستور \f@nch@vbox را قرار دهیم، مقدار ارتفاع را اندازه بگیریم و در صورتی که مقدار \headheight کمتر از این ارتفاع بود، مقدار \headheight را به این ارتفا افزایش دهیم.

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{bidi}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\Huge\bfseries This is a test}
\makeatletter
\newcommand*{\bidi@f@nch@lh}{%
  \ifodd\count\z@
    \f@nch@olh
  \else
    \f@nch@elh
  \fi
}
\newcommand*{\bidi@f@nch@ch}{%
  \ifodd\count\z@
    \f@nch@och
  \else
    \f@nch@ech
  \fi
}
\newcommand*{\bidi@f@nch@rh}{%
  \ifodd\count\z@
    \f@nch@orh
  \else
    \f@nch@erh
  \fi
}
\bidi@BeforeHeader{%
  \setbox\@tempboxa\vbox{%
    \hbox{%
      \rlap{%
        \parbox[b]{\headwidth}{%
          \raggedright\bidi@f@nch@lh
        }%
      }%
      \hfill
      \parbox[b]{\headwidth}{%
        \centering\bidi@f@nch@ch
      }%
      \hfill
      \llap{%
        \parbox[b]{\headwidth}{%
          \raggedleft\bidi@f@nch@rh
        }%
      }%
    }%
    \headrule
  }%
  \ifdim\headheight<\ht\@tempboxa
    \setlength{\headheight}{\ht\@tempboxa}%
  \fi 
}
\makeatother
\begin{document}
This is a test.
\end{document}
پاسخ داده شده دی 29, 1397 توسط وفا (24,180 امتیاز)
بسیار عالی فقط دو مشکلی که من دارم
یکی اینکه وقتی pagestyle روی empty یا plain باشه درست کار نمی‌کنه
و یکی اینکه با تغییر headheight مقدار textheight رو می‌خوام به همون مقدار کاهش یا افزایش بدم که تا حالا موفق نشدم
این پاسخ پرسش موجود رو پاسخ می‌دهد. دو مشکلی که شما بهش اشاره کردید هر کدوم یک پرسش جدید است که هر یک به یک فایل کمینه نیاز دارد.
+1 رای

قبلا در این پست مشابه همین سوال را داشتم که با راهنمایی‌های آقای خلیقی در همان پست داشتند با کمی تغییر در بسته‌ی fancyhdr بسته autofancyhdr را نوشته‌ام که مقدار headheight را برای هر صفحه دقیقا به اندازه مورد نیاز همان صفحه قرار می‌دهد.
بسته‌ی نوشته شده را در پیوست قرار داده‌ام.

پاسخ داده شده دی 28, 1397 توسط مجتبی (587 امتیاز)
خیلی عالی بود. ممنونم
امکان داره برای ته‌برگ هم خودکار حساب بکنه؟ منظورم footskip هستش
من بسته‌ای به نام autofancyhdr رو به ctan داده‌ام که در آن بسته اصلی fancyhdr فراخوانی می‌شود و مقدار کمی تغییر در یکی از ماکروها اعمال می‌شود و ارتفاع هدر را خودکار حساب می‌کند. میتوان برای فوتر نیز به همان روش این کار را انجام داد که من با توجه به اینکه نیاز نداشتم آن را ننوشتم. البته نمیدانم این بسته autofancyhdr هنوز کار می‌کند یا نه چون خیلی وقته رهاش کردم
خیلی ممنونم. پس یه نگاهی می‌کنم ببینم می‌تونم متوجه بشم برای فوتر انجام بدم یا نه.
بله کار می‌کنه :)
با آخرین نسخهٔ تک لایو ۲۰۲۰ هم امتحان کردم
سپاس
ممنون از حسن توجه شما
کاری که انجام دادم به این شکله که خود بسته‌ی fancyhdr ارتفاع هدر مورد نیاز رو داره و من اومدم اونها رو در یک فایلی ذخیره کردم و در اجرای بعدی از اطلاعات اون فایل استفاده کردم. در واقع برای اینکه درست کار کنه به دوبار اجرا نیاز داره
0 رای

بسته خودش خودکار این کار رو انجام می‌ده.

\documentclass{article}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\Huge\bfseries This is a test}
\begin{document}
This is a test.
\end{document}

پس از پردازش هدشار زیر رو می‌ده:

Package Fancyhdr Warning: \headheight is too small (12.0pt): 
 Make it at least 30.0pt.
 We now make it that large for the rest of the document.
 This may cause the page layout to be inconsistent, however.

برای اطلاعات بیشتر تعریف ماکروی \f@nch@vbox رو ببینید.

\def\f@nch@vbox#1#2{\setbox0\vbox{#2}\ifdim\ht0>#1\f@nch@warning
  {\string#1 is too small (\the#1): ^^J Make it at least \the\ht0.^^J We
    now make it that large for the rest of the document.^^J This may
    cause the page layout to be inconsistent, however\@gobble}%
  \dimen0=#1\global\setlength{#1}{\ht0}\ht0=\dimen0\fi \box0}

کاری که بسته انجام می‌ده اینه که متن رو داخل یک \vbox قرار می‌ده، اگر ارتفاع این کادر بزرگ‌تر از ارتفاع تخصیص داده شده باشه هشدار رو می‌ده و پس از پایان هشدار مقدار \dimen0 رو برابر ارتفاع تخصیص داده شده می‌کنه و ارتفاع تخصیص داده شده رو به ارتفاع واقعی کادر \vbox که حاوی متن است افزایش می‌دهد و سپس ارتفاع کادر \vbox رو برابر \dimen0 می‌کنه و در پایان کادر عمودی حاوی متن رو قرار می‌دهد.

پاسخ داده شده دی 28, 1397 توسط وفا (24,180 امتیاز)
ممنون از پاسخگوییتون.
بسته fancyhdr مقدار headheight رو برای باقیمانده صفحات سند به طور اتوماتیک انجام میده ولی اینجا چند تا مشکل داریم یکی اینکه خود همون صفحه ارتفاع هدر تغییر نمی‌کنه و یکی اینکه ممکنه صفحات بعدی هدرهایی با ارتفاع‌های متفاوتی داشته باشند و یکی هم اینکه در آخر باید مقداری که بسته fancyhdr در هشداری که ارسال کرده اعلام می‌کنه بصورت دستی در سند تعیین بشه.
مثلا کد زیر را در نظر بگیرید
\documentclass{article}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\Huge\bfseries This is a test \\ This is a test}
\begin{document}
\lipsum
\end{document}
پرسش شما با چیزی که در سوال مطرح کردید تفاوت داره. منظور شما از راه خودکار این هست که یک ارتفاع مناسب بصورت خودکار برای همه صفحات تعیین بشه که برای همه صفحات کار کنه اما متن پرسشتون متفاوت هست و خواننده متوجه دقیق منظور نمی‌شه. لطفا متن پرسشتون رو تغییر بدهید و اطلاعات کامل قرار بدهید.
تغییر دادم
0 رای
پاسخ داده شده اسفند 1, 1397 توسط Honar23jaleb (5 امتیاز)
ویرایش شده اسفند 28, 1397 توسط Honar23jaleb
پرسشتان نامفهوم است. منظورتان مشخص نیست
...