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

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

رفع خطا جدول ریاضی‌نویسی مراجع شکل شماره‌گذاری xepersian فهرست مطالب منابع فونت bidi parsilatex اسلاید تک‌لایو پانویس زی‌پرشین بیب‌تک بیمر پاورقی نماد tikz ویرایشگر biditexmaker سربرگ قالب bibtex هدر رسم شکل واژه‌نامه اندازه فونت texstudio ارجاع‌دهی ماتریس bidipresentation beamer عنوان فصل رسم جدول عنوان شکل اسلاید فارسی گراف حاشیه زیرنویس شکل فرمول‌نویسی محیط قضیه اعمال نشدن تغییرات در پی‌دی‌اف حروف‌چینی کد رنگ عدم اجرا مکان شکل متن لاتین و فارسی tabriz_thesis شماره صفحه فارسی‌تک شماره فصل فهرست اشکال tikzpicture listings align فرمول خروجی نیم‌فاصله فاصله‌گذاری enumerate بسته biditools itemize texlive2015 فرمول چندضابطه‌ای نمودار شماره‌گذاری صفحات glossaries biditufte-book سوال امتحانی نمایه کپشن تصویر الگوریتم شماره پاورقی کادر texlive2016 پیوست‌ hyperref texmaker خطا فونت فارسی و انگلیسی دیاگرام چپ‌چینی فصل‌نویسی تنظیم جدول اندیس لاتک تک لایو 2015 به‌روزرسانی بسته aimc46 lollipop میک‌تک سوال چهارگزینه‌ای کاما iust-thesis ماکرونویسی جستجوی معکوس تورفتگی texworks پوستر فرمول طولانی xindy multicol فهرست جداول subfigure pdf زیرنویس شماره فرمول فاصله بین خطوط حروف‌چینی چندستونی میکروسافت ورد header winedt قالب پایان‌نامه آکولاد فلش عنوان بخش شماره گذاری فاصله سطرها اعداد فارسی شکست خط صفر توخالی بیرون‌زدگی شمارنده فصل جایابی تصویر caption کمک مالی فاصله خطوط tex-programming فهرست نمادها قرآن اوبونتو غلط‌گیری املایی kashida tabriz-thesis محیط ریاضی fancyhdr عکس پانویس پاراگرافی شماره‌گذاری فرمول bidihl قالب کتاب pgfplots هایپرلینک الگوریتم‌ پیکان equation جدول افقی جداکننده شماره قسمت رسم نمودار توابع فونت ایتالیک نوشتافت رسم گراف پانویس افقی پاراگراف‌بندی وسط‌چینی افقی algorithm2e فونت بولد رسم کادر بولد متلب tabular extrafootnotefeatures text baselineskip متن فارسی و انگلیسی tcolorbox فرمول چندخطی neveshtuft شکستن جدول بازیابی اطلاعات آپدیت texlive شعر ایتالیک لوگو sumatra bidipoem matlab eps xelatex fontspec texlive2014 زیرنویس لاتین tex computeautoilg نصب تک‌لایو متن دوستونه عنوان جدول عدم نمایش در خروجی xebaposter نمونه اسلاید. خطا یابی خطا در اجرا متن دو ستونه اجرا نشدن فایل rsync
1 نفر آنلاین
0 عضو و 1 مهمان در سایت حاضرند
بازدید امروز: 1234
بازدید دیروز: 6983
بازدید کل: 3448959

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

+2 رای
191 بازدید

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

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

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

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

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 توسط وفا (18,278 امتیاز)
ویرایش شده فروردین 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 توسط وفا (18,278 امتیاز)
+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 توسط وفا (18,278 امتیاز)
...