اول ادعای نادرست شما
این مشکل در کلاس 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
}
افتاد؟