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

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

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

چرا فاصله قبل و بعد از فرمول‌های نمایشی هنوز برابر نیست؟

+2 رای
1,863 بازدید

همون‌طور که می‌دونید در تالار قبلی در مورد فاصله نابرابر قبل و بعد از فرمول‌های نمایشی خیلی بحث کردیم. نتیجه این شد که در نسخه‌ 11.154 بسته bidi دیگه از دستور \predisplaydirection استفاده نشده و لذا مشکل حل شد؛ اما من حس می‌کنم این مشکل همچنان پابرجاست. برای اثبات این حرفم کافیه کد زیر رو اجرا کنید:

\documentclass{article}
\usepackage{amsmath} 
\usepackage{xepersian}
\settextfont{XB Niloofar}
\begin{document}
\noindent
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\[===========\]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\begin{align}
 - - - - - - - - 
\end{align}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\end{document}

همون‌طور که می‌بینید، به وضوح فاصله قبل و بعد از فرمول‌ها یکسان نیست. حالا اگه زی‌پرشین رو حذف کنید، می‌بینید که فاصله‌ها مساوی می‌شه.
آیا من دارم اشتباه می‌کنم یا این مشکل هنوز پابرجاست؟

فایل‌های پیوست
سوال شده فروردین 20, 1394 توسط وحید دامن‌افشان (6,499 امتیاز)
به مقدار خیلی کمی جابه‌‌جا می‌شه. در حالتی که زی‌پرشین فراخوانی میشه فاصله‌ها نابرابره!
من از آخرين نسخه زي پرشين استفاده ميكنم.
من هم چک کردم با فونت‌های مختلف نیز چنین حالتی وجود دارد. البته من در منزل
از نگارش قدیمی زی‌پرشین استفاده می‌کنم یعنی

This is XeTeX, Version 3.14159265-2.6-0.99991 (TeX Live 2014/W32TeX) (preloaded format=xelatex 2015.4.6)  9 APR 2015 08:27
Package: xepersian 2014/02/05 v13.7 Persian typesetting in XeLaTeX

3 پاسخ

+4 رای
 
بهترین پاسخ

من مشکلی نمی‌بینم و فاصله‌ها یکسان هستند. اگر می‌خواهی فاصله‌ها را بین متن فارسی و انگلیسی مقایسه کنی باید شماره فرمول رو برعکس کنی. یعنی چی؟ یعنی اگر در فارسی، شماره فرمول سمت راست قرار می‌گیره، در انگلیسی شماره فرمول رو سمت چپ قرار بدی و اگر در فارسی شماره فرمول سمت راست قرار می‌گیره در انگلیسی شماره فرمول رو در سمت چپ قرار بدی. همچنین حتماً در دو حالت انگلیسی و فارسی از یک قلم استفاده کن وگرنه تستی که می‌کنی بی‌معناست چون کاراکترها در قلم‌های فارسی و لاتین ارتفاع و عمق متفاوتی دارند و بنابراین فاصله متفاوتی رو تولید می‌کنند. نکته آخر اینکه موقع اندازه گرفتن فاصله یا هر چیز دیگری هرگز به چشمهایت اعتماد نکن چون هر قدر هم که دقت کنی، چشم خطای خودش رو داره. به همین خاطر هنگام اندازه گرفتن حتماً از بسته bidipagegrid استفاده کن. بنابراین اگر فارسیت اینجوریه:

\documentclass{article}
\usepackage{amsmath} 
%\usepackage{fontspec}
%\setmainfont{Arial}
\usepackage{bidipagegrid}
\usepackage{xepersian}
\settextfont{Arial}
\begin{document}
\noindent
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\[===========\]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\begin{align}
 - - - - - - - - 
\end{align}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\end{document}

انگلیسیت باید اینجوری باشه:

\documentclass{article}
\usepackage[leqno]{amsmath} 
\usepackage{fontspec}
\setmainfont{Arial}
\usepackage[direction=LTR]{bidipagegrid}
%\usepackage{xepersian}
%\settextfont{Arial}
\begin{document}
\noindent
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\[===========\]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
\begin{align}
 - - - - - - - - 
\end{align}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\end{document}

و همونطور که می‌بینی فاصله‌ها در دو حالت دقیقاً یکی است.

اگر کتاب TeXBook رو بخونی می‌بینی که خود Knuth گفته زمانی که از \lqno (برای قرار دادن شماره فرمول در سمت چپ) استفاده می‌کنید فاصله بیشتری نسبت به \eqno (برای قرار دادن شماره فرمول در سمت راست) قرار می‌گیرد. این موضوع در صفحه ۱۸۷ کتاب اومده. متن دقیقش اینه:

Nowadays people are using right-hand equation numbers more and more,
because a display most often comes at the end of a sentence or clause, and
the right-hand convention keeps the number from intruding into the clause.
Furthermore, it's often possible to save space when a displayed equation
follows a short text line, since less space is needed above the display;
such savings are not possible with |\leqno|, because there's no room for
overlap. For example, there is less space above display~(15) than there is
above~(16) in our illustrations of\/ |\eqno| and |\leqno|, although the
formulas and text are otherwise identical.

شماره فرمول ۱۵ در سمت راست و شماره فرمول ۱۶ در سمت چپ در این صفحه هست.

در متون انگلیسی، متن از سمت چپ شروع می‌شود و اگر شماره فرمول در سمت چپ باشد، فاصله بیشتری وجود دارد در حالی که اگر شماره فرمول در سمت راست باشد، فاصله کمتری وجود دارد. حالا این را با حالت فارسی مقایسه کن. زمانی که فارسی می‌نویسی، از سمت راست می‌نویسی بنابراین شماره فرمول در سمت راست فاصله بیشتری باید تولید کند و شماره فرمول در سمت چپ باید فاصله کمتری تولید کند که دقیقاً همینطور هست و رفتاری است کاملاً طبیعی.

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

\setbox0\vbox{%
...}
\the\ht0
  • برای قلم پیش‌فرض تک یعنی قلم Computer Modern در هر دو حالت فارسی و انگلیسی، ارتفاع \vbox یکی است (92.30554pt). توجه کن که وقتی می‌خواهی قلم Computer Modern رو امتحان کنی، از بسته‌های xepersian و fontspec استفاده نکن. در حالت فارسی به جای استفاده از بسته xepersian از بسته bidi با گزینه RTLdocument استفاده کن.

  • برای قلم Arial، ارتفاع \vbox در دو حالت فارسی یکی است (91.03223pt).

  • جالب است که برای قلم XB Niloofar، ارتفاغ \vbox برای حالت انگلیسی 90.16797pt و برای حالت فارسی 89.35742pt است که به وضوح باگ قلم را نشان می‌دهد. اگر باور نمی‌کنی، خروجی:

    \documentclass{article}
    \usepackage{amsmath}
    \usepackage{fontspec}
    \setmainfont{XB Niloofar}
    \begin{document}
    \setbox0\vbox{%
    ...}
    \the\ht0
    \end{document}
    

متأسفانه وقتی من کد کپی و پیست می‌کنم، صفحه یخ می‌زند بنابراین کد بالا را با دست نوشتم و کپی و پیست نکردم. منظور از ‍... در کد بالا همه متن و فرمول‌هایت است. با کد بالا ارتفاع \vbox چقدر است؟ حالا یک تغییر خیلی کوچک در این فایل تک انجام بده و اون اینکه گزینه Script=Arabic را به دستور \setmainfont اضافه کن. حالا ارتفاع \vbox چقدر است؟ آیا می‌توانی تفاوت را ببینی؟ همانطور که می‌بینی شما حتی از بسته bidi یا xepersian هم در این نمونه آخر استفاده نکرده‌ای.

پاسخ داده شده فروردین 21, 1394 توسط وفا (24,609 امتیاز)
ویرایش شده فروردین 22, 1394 توسط وفا
وفا جان مثل همیشه از پاسخت لذت بردم. ممنونم. خیلی چیزها یاد گرفتم.
ممنون. من هم از اینکه تونستم قانع کنم شما را، خوشحالم.
پاسخم رو ویرایش کردم و صفحه کتاب و متن دقیق نقل قول از Knuth رو هم درج کردم.
باز هم ممنونم. لطف کردی.
+3 رای

و البته اگر خواستی فاصله بعد و قبل فرمول نمایشی رو چک کنی، حتماً از چیزی مانند کد زیر استفاده کن تا قلم تأثیری نداشته باشه:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\begin{document}
\framebox[0.8\textwidth]{}
\[\framebox[0.8\textwidth]{}\]
\framebox[0.8\textwidth]{}
\begin{align}
\framebox[0.8\textwidth]{}
\end{align}
\framebox[0.8\textwidth]{}
\end{document}
پاسخ داده شده فروردین 21, 1394 توسط وفا (24,609 امتیاز)
+3 رای

این هم یک نمونه دیگره. تعریف محیط eqxample رو از راهنمای بسته amsmath یعنی فایل amsldoc.tex کپی کردم. مقدار \abovedisplayskip و \belowdisplayskip داخل این محیط 3pt هست. با اضافه یا کم کردنش باید راحت بتونی بفهمی که فاصله قبل و بعد از فرمول یکی هست یا نیست:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\newenvironment{eqxample}{%
  \par\addvspace\medskipamount
  \noindent\begin{minipage}{.5\columnwidth}%
  \def\producing{\end{minipage}\begin{minipage}{.5\columnwidth}%
    \hbox\bgroup\kern-.2pt\vrule width.2pt%
      \vbox\bgroup\parindent0pt\relax
%    The 3pt is to cancel the -\lineskip from \displ@y
    \abovedisplayskip3pt \abovedisplayshortskip\abovedisplayskip
    \belowdisplayskip3pt \belowdisplayshortskip\belowdisplayskip
    \noindent}
}{%
  \par
%    Ensure that a lonely \[\] structure doesn't take up width less than
%    \hsize.
  \hrule height0pt width\hsize
  \egroup\vrule width.2pt\kern-.2pt\egroup
  \end{minipage}%
  \par\addvspace\medskipamount
}
\begin{document}
\begin{eqxample}
\begin{verbatim}
\framebox[0.8\textwidth]{}
\[\framebox[0.8\textwidth]{}\]
\framebox[0.8\textwidth]{}
\end{verbatim}
\producing
\framebox[0.8\textwidth]{}
\begin{equation*}
\framebox[0.8\textwidth]{}
\end{equation*}
\framebox[0.8\textwidth]{}
\end{eqxample}

\bigskip\bigskip\bigskip

\begin{eqxample}
\begin{verbatim}
\framebox[0.8\textwidth]{}
\begin{align}
\framebox[0.8\textwidth]{}
\end{align}
\framebox[0.8\textwidth]{}
\end{verbatim}
\producing
\framebox[0.8\textwidth]{}
\begin{align}
\framebox[0.8\textwidth]{}
\end{align}
\framebox[0.8\textwidth]{}
\end{eqxample}
\end{document}
پاسخ داده شده فروردین 22, 1394 توسط وفا (24,609 امتیاز)
...