تالار گفتگوی پارسی‌لاتک

زی‌پرشین XePersian => زی‌تک => نويسنده: وحید دامن‌افشان در سپتامبر 29, 2014, 08:56:11 pm

عنوان: جابجا شدن کراپ‌مارک‌های چاپ‌شده توسط بسته bidi-atbegshi در محیط multicols
رسال شده توسط: وحید دامن‌افشان در سپتامبر 29, 2014, 08:56:11 pm
توی فایل پیوست، به محض شروع محیط multicols در صفحه ۳، کراپ‌مارک‌هایی که توسط بسته bidi-atbegshi چاپ شدند، جابجا می‌شن. این مشکل رو چطور می‌شه حل کرد؟
عنوان: پاسخ : جابجا شدن کراپ‌مارک‌های چاپ‌شده توسط بسته bidi-atbegshi در محیط multicols
رسال شده توسط: vafa در سپتامبر 29, 2014, 10:01:58 pm
اگر از بسته geometry استفاده نمی‌کنید، حتماً کد زیر را در نوشتار خود قرار دهید:
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
اگر از بسته geometry استفاده می‌کنید، احتیاجی به این کار نیست. البته این موضوع ربطی به مشکل نداره تنها یک پیشنهاد بود.
توی فایل پیوست، به محض شروع محیط multicols در صفحه ۳، کراپ‌مارک‌هایی که توسط بسته bidi-atbegshi چاپ شدند، جابجا می‌شن. این مشکل رو چطور می‌شه حل کرد؟

علت مشکل:

اگر به خاطر داشته باشید توی نسخه‌های قدیمی بسته bidi زمانی که از بسته multicol و محیط multicols استفاده می‌کردید فهرست مطالب اشتباه چاپ می‌شد که این یکی از باگ‌های موتور etex بود. برای درست کردن این موضوع (روشی که الان بسته bidi استفاده می‌کنه) اینه که تک رو به قول معروف ما fool می‌کنیم. برای مثال اگر دو ستون دارید این اتفاقی هست که می‌افته:
\hskip \columnwidth
\hfil \vrule width\columnseprule \hfil
<put first column here>
\hskip -\textwidth
<put second column here>
\hskip \columnsep
\hskip \columnwidth
با این روش هم دو ستون ترتیبش از راست به چپ میشه و هم مشکل فهرست مطالب دیگه وجود نداره. اما اگر صفحه‌ای با محیط multicols شروع یا تموم بشه از اونجایی که بسته multicols در واقع output routine رو تغییر می‌ده، جای گوشه‌های چپ و راست کاغذ به اندازه همون \columnwidth و \columnsep عوض میشه.

راه‌حل چیست:

اینکه تست کنیم که آیا متن یک ستونی هست یا نه. اگر یک ستونی بود همون مختصات قبلی رو استفاده کن ولی اگر یک‌ستونی نیود از متخصات جدید استفاده کن:
\documentclass[a4paper]{book}
\usepackage{ptext,graphicx}
\usepackage{picture}
\usepackage{multicol}
\usepackage{bidi-atbegshi}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
\makeatletter
\AtBeginShipout{%
\ifnum\col@number=\@ne
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-1,-5){\line(-1,0){10}}
\put(-1,-5){\line(0,-1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(1,-5){\line(1,0){10}} 
\put(1,-5){\line(0,-1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-1,5){\line(-1,0){10}}
\put(-1,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(1,5){\line(1,0){10}}
\put(1,5){\line(0,1){10}}
}
\else
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\columnwidth+\columnsep+1mm\relax,-5){\line(-1,0){10}}
\put(-\dimexpr\columnwidth+\columnsep+1mm\relax,-5){\line(0,-1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\columnwidth+\columnsep-1mm\relax,-5){\line(1,0){10}} 
\put(-\dimexpr\columnwidth+\columnsep-1mm\relax,-5){\line(0,-1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\columnwidth+\columnsep+1mm\relax,5){\line(-1,0){10}}
\put(-\dimexpr\columnwidth+\columnsep+1mm\relax,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\columnwidth+\columnsep-1mm\relax,5){\line(1,0){10}}
\put(-\dimexpr\columnwidth+\columnsep-1mm\relax,5){\line(0,1){10}}
}
\fi
}
\makeatother
\begin{document}
\chapter{مقداری متن}
\ptext[1-10]
\newpage
\begin{multicols*}{2}
\ptext[1-7]
\end{multicols*}
\end{document}

عنوان: پاسخ : جابجا شدن کراپ‌مارک‌های چاپ‌شده توسط بسته bidi-atbegshi در محیط multicols
رسال شده توسط: vafa در سپتامبر 29, 2014, 10:44:57 pm
کد قبلی فقط یرای دو ستون کار می‌کرد. در کد زیر مهم نیست که تعداد ستونها چند تا باشند چون ضریب \columnwidth و \columnsep همیشه تعداد ستونها منهای یک است:
\documentclass[a4paper]{book}
\usepackage{ptext,graphicx}
\usepackage{picture}
\usepackage{multicol}
\usepackage{bidi-atbegshi}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
\makeatletter
\AtBeginShipout{%
\ifnum\col@number=\@ne
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-1,-5){\line(-1,0){10}}
\put(-1,-5){\line(0,-1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(1,-5){\line(1,0){10}} 
\put(1,-5){\line(0,-1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-1,5){\line(-1,0){10}}
\put(-1,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(1,5){\line(1,0){10}}
\put(1,5){\line(0,1){10}}
}
\else
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep+1mm\relax,-5){\line(-1,0){10}}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep+1mm\relax,-5){\line(0,-1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep-1mm\relax,-5){\line(1,0){10}} 
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep-1mm\relax,-5){\line(0,-1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep+1mm\relax,5){\line(-1,0){10}}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep+1mm\relax,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep-1mm\relax,5){\line(1,0){10}}
\put(-\dimexpr\numexpr\col@number-1\relax\columnwidth+\numexpr\col@number-1\relax\columnsep-1mm\relax,5){\line(0,1){10}}
}
\fi
}
\makeatother
\begin{document}
\chapter{مقداری متن}
\ptext[1-100]
\begin{multicols*}{4}
\ptext[1-100]
\end{multicols*}
\ptext[1-100]
\end{document}
عنوان: پاسخ : جابجا شدن کراپ‌مارک‌های چاپ‌شده توسط بسته bidi-atbegshi در محیط multicols
رسال شده توسط: vafa در سپتامبر 30, 2014, 04:55:23 am
توی نسخه بعدی بسته bidi-atbegshi من این مورد رو درست می‌کنم تا احتیاجی به تنظیم دستی نباشه.