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

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

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

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

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

همون‌طور که می‌دونید در تالار قبلی در مورد فاصله نابرابر قبل و بعد از فرمول‌های نمایشی خیلی بحث کردیم. نتیجه این شد که در نسخه‌ 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,842 امتیاز)
به مقدار خیلی کمی جابه‌‌جا می‌شه. در حالتی که زی‌پرشین فراخوانی میشه فاصله‌ها نابرابره!
من از آخرين نسخه زي پرشين استفاده ميكنم.
من هم چک کردم با فونت‌های مختلف نیز چنین حالتی وجود دارد. البته من در منزل
از نگارش قدیمی زی‌پرشین استفاده می‌کنم یعنی

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