اول ادعای نادرست شما
این مشکل در کلاس tufte-book
وجود نداره.
من ثابت میکنم که ادعای شما نادرست است. خروجی:
\documentclass[showframe]{biditufte-book}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Yas}
\begin{document}
\begin{fullwidth}
\ptext[1]
\hrule height 3pt
\ptext[1]
\end{fullwidth}
\newpage
\begin{fullwidth}
\ptext[1]
\hrule height 3pt
\ptext[1]
\end{fullwidth}
\end{document}
را ببین. در واقع میفهمی که این خروجی tufte-book
هست که باگ داره نه خروجی biditufte-book
. در tufte-book
همیشه oneside
است و اصلاً twoside
بیمعنی است و جای margin
در صفحات زوج و فرد تغییر نمیکنه و در همه صفحات یکجا قرار میگیره. در صورتی که در biditufte-book
گزینههای oneside
و twoside
به خوبی کار میکند و بصورت پیشفرض twoside
فعال است (همان چیزی که باید باشد).
در tufte-book
گزینه symmetric
فعال نیست در صورتی که در biditufte-book
این گزینه فعال هست. بنابراین اگر بخواهی جای margin
ها در صفحات زوج و فرد در کلاس tufte-book
تغییر کنه:
\documentclass[showframe,symmetric]{tufte-book}
\usepackage{lipsum}
\begin{document}
\begin{fullwidth}
\lipsum[1]
\hrule height 3pt
\lipsum[1]
\end{fullwidth}
\newpage
\begin{fullwidth}
\lipsum[1]
\hrule height 3pt
\lipsum[1]
\end{fullwidth}
\end{document}
باید گزینه symmetric
رو زور کنی (یک باگ) و همونطور که میبینی حالا خروجی صفحه دوم مشابه خروجی صفحه اول biditufte-book
است. حالا میتونی موضوع رو درک کنی؟
اصلاً مشکلی وجود نداره که کسی بخواد این مشکل رو برطرف کنه. شما مقدار \textwidth
رو داخل و خارج این محیط اندازه گرفتی؟ اگر این کار رو کنی میفهمی که هر دو اندازه یکی است.
شما دانش درستی از محیط fullwidth
نداری و به اشتباه فکر میکنی که توی این محیط اندازه \textwidth
تفاوت داره که اینطور نیست. این محیط معادل
\begin{adjustwidth*}{}{-\dimexpr(\marginparwidth+\marginparsep\relax}
\ptext[1]
\end{adjustwidth*}
هست که خودش معادل
\begin{list}{}{\leftmargin=0pt \rightmargin=-\dimexpr\marginparwidth+\marginparsep\relax}
\item[]
\ptext[1]
\end{list}
هست.
توی صفحات فرد چگونه خط افقی بکشیم؟
این کار رو خیلی راحت میشه انجام داد:
\moveleft\dimexpr\marginparwidth+\marginparsep\relax\vbox{
\hrule height 3pt width \linewidth
}
کاری که انجام میدی اینه که \hrule
را داخل یک \vbox
قرار میدهی و \vbox
را به اندازه \marginparwidth+\marginparsep
به سمت چپ حرکت میدی. اگر بخواهی این کار به صورت خودکار انجام بشه دستوری به نام \autohrule
تعریف کن:
\newcommand*{\autohrule}{%
\ifoddpage
\moveleft\dimexpr\marginparwidth+\marginparsep\relax\vbox{
\hrule height 3pt width \linewidth
}
\else
\vbox{\hrule height 3pt width \linewidth}
\fi
}
افتاد؟