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

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

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

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

+1 رای
1,076 بازدید

بسته‌ی 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,432 امتیاز)
بسیار عالی فقط دو مشکلی که من دارم
یکی اینکه وقتی 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,432 امتیاز)
ممنون از پاسخگوییتون.
بسته 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
پرسشتان نامفهوم است. منظورتان مشخص نیست
...