eqn(1) General Commands Manual eqn(1)

eqn - قالب‌بندی ریاضیات (معادلات) برای groff یا MathML

eqn [-CNrR] [-d xy] [-f global-italic-font] [-m minimum-type-size] [-M eqnrc-directory] [-p super/subscript-size-reduction] [-s global-type-size] [-T device] [file ...]
eqn --help
eqn -v
eqn --version

پیاده‌سازی گنو از eqn بخشی از سامانه قالب‌بندی اسناد groff(7) است. eqn یک پیش‌پردازنده troff(1) است که عبارات بیان‌شده به زبان اختصاصی خود را که در ورودی roff(7) گنجانده شده‌اند، به نشانه‌گذاری‌های ریاضی حروف‌چینی‌شده توسط troff(1) ترجمه می‌کند. این برنامه محتوای هر پرونده را به جریان خروجی استاندارد رونویسی می‌کند و هر معادله را که بین خطوط شروع‌شونده با .EQ و .EN یا در میان یک جفت نویسه جداکننده تعیین‌شده توسط کاربر قرار دارد ترجمه می‌نماید. معمولاً eqn به‌طور مستقیم توسط کاربر اجرا نمی‌شود، بلکه با مشخص کردن گزینه -e در groff(1) فراخوانی می‌گردد. اگرچه نحو ورودی eqn گنو سازگاری بالایی با eqn در AT&T دارد، اما خروجی تولیدشده توسط eqn نمی‌تواند توسط troff در AT&T پردازش شود؛ بلکه باید از troff گنو (یا یک troff عمومی که افزونه‌های مرتبط گنو را پیاده‌سازی کرده باشد) استفاده شود. اگر هیچ عملوند فایلی مشخص نشده باشد، یا اگر پرونده برابر “-” باشد، eqn جریان ورودی استاندارد را می‌خواند.

مگر در حالتی که گزینه -R استفاده شده باشد، eqn فایل eqnrc را ابتدا در پوشه‌های مشخص‌شده با گزینه -M ، سپس در /usr/share/groff/site-tmac و در نهایت در پوشه استاندارد ماکروها یعنی /usr/share/groff/1.24.1/tmac جستجو می‌کند. اگر این فایل وجود داشته و قابل خواندن باشد، eqn پیش از هر ورودی دیگری آن را پردازش می‌کند.

این صفحه راهنما عمدتاً به تفاوت‌های میان eqn گنو و eqn در AT&T می‌پردازد. بیشتر قابلیت‌های جدید زبان ورودی eqn گنو بر پایه TeX هستند. در ادامه اشاراتی به تفاوت‌های میان TeX و eqn گنو آمده است؛ اگر با TeX آشنایی ندارید می‌توانید با خیال آسوده از آن‌ها صرف‌نظر کنید. چهار نکته شایان توجه است:

•
نسخه گنو eqn هنگامی که با گزینه “-T MathML” فراخوانی شود، خروجی Presentation MathML تولید می‌کند.
•
نسخه گنو eqn پشتیبانی خوبی از دستگاه‌های ترمینال ندارد، هرچند ممکن است برای ورودی‌های ساده کافی باشد.
•
نسخه گنو eqn نشانه ورودی “...” را به‌صورت سه‌نقطه روی خط پایه متن قرار می‌دهد، نه سه‌نقطه در مرکز خط که در eqn مربوط به AT&T وجود داشت. برای قرار دادن سه‌نقطه روی محور ریاضی، از ماکروی الحاقی گنو به نام cdots استفاده کنید.
•
دستور اولیه delim در eqn گنو، آرگومان “on” را به‌عنوان یک جفت جداکننده معادله تلقی نمی‌کند.

ورودی eqn از نشانه‌ها (توکن‌ها) تشکیل شده است. شکل قانون دوم نیوتن برای حرکت با جرم ثابت را در نظر بگیرید. ورودی

.EQ
F =
m a
.EN

تبدیل می‌شود به F=ma. هر یک از F، =، m، و a یک نشانه است. فاصله‌ها و خطوط جدید قابل تعویض با یکدیگرند؛ آن‌ها نشانه‌ها را جدا می‌کنند اما خطوط را نمی‌شکنند یا در خروجی فاصله‌ای ایجاد نمی‌کنند.

گذشته از کارکردهای اصلی، نویسه‌های ورودی زیر نیز نشانه‌ها را از یکدیگر جدا می‌سازند.

{ }
آکولادها عمل گروه‌بندی را انجام می‌دهند. در حالی که “e sup a b” بیانگر “(e به توان a) ضرب‌در b”، است، “e sup { a b }” به معنای “e به توان (a ضرب‌در b)” می‌باشد. هنگامی که بی‌درنگ پیش از یک دستور اولیه “left” یا “right” بیایند، آکولاد معنای ویژه خود را از دست می‌دهد.
^ ~
به ترتیب نیم‌فاصله و فاصله کامل هستند. از آن‌ها برای تنظیم دقیق ظاهر خروجی استفاده کنید.

نویسه‌های تب (Tab) و لیدر (Leader) نشانه‌ها را از هم جدا می‌کنند و موقعیت ترسیم را به توقفگاه تب بعدی می‌برند، اما به‌ندرت در ورودی eqn به‌کار می‌روند. هنگام وقوع، باید در بیرونی‌ترین دامنه واژگانی ظاهر شوند. این امر بدان معناست که نمی‌توانند درون آکولادهایی که برای رفع ابهام ورودی لازم هستند قرار گیرند؛ در چنین حالتی eqn یک خطا گزارش خواهد کرد. (برای قواعد تکمیلی جداسازی نشانه‌ها، به زیربخش “ماکروها” در ادامه مراجعه کنید.)

نشانه‌های دیگر عبارتند از دستورات اولیه (primitives)، ماکروها، آرگومانی برای هر یک از موارد فوق، یا اجزای یک معادله.

دستورات اولیه (Primitives) کلیدواژه‌های بنیادین زبان eqn هستند. آن‌ها می‌توانند جنبه‌ای از وضعیت پیش‌پردازنده را پیکربندی کنند، مانند تنظیم انتخاب قلم “سراسری” یا اندازه قلم (gifont و gsize)، یا تعریف و حذف ماکروها (“define” و undef)؛ به این موارد فرمان‌ها گفته می‌شود. سایر دستورات اولیه عملیات قالب‌بندی را بر روی نشانه‌های پیرامون خود انجام می‌دهند (مانند fat، over، sqrt، یا up).

اجزای معادله شامل متغیرهای ریاضی، ثابت‌ها، مقدارهای عددی، و عملگرها هستند. eqn برخی از دنباله‌های نویسه‌ای ورودی را به دنباله‌های گریز نویسه ویژه groff بازتکاشت می‌کند تا در ورود معادلات صرفه‌جویی شده و اطمینان حاصل شود که گلیف‌هایی از قلم بدون‌استایل استفاده می‌شوند؛ ببینید: groff_char(7).

+ \[pl] ' \[fm]
- \[mi] <= \[<=]
= \[eq] >= \[>=]

ماکروها امکان می‌دهند دستورات اولیه، اجزا، و سایر ماکروها گردآوری شده و به‌صورت یک نشانه واحد استفاده شوند. ماکروهای از پیش تعریف‌شده، آماده‌سازی ورودی eqn را به شکلی شبیه به بیان گفتاری آن آسان می‌سازند؛ برای نمونه، cos، hat، inf، و lim را در نظر بگیرید.

نسخه گنو eqn یک نوع (type) را به هر جزء معادله نسبت می‌دهد، و فاصله اطراف آن را بر این اساس تنظیم می‌کند. انواع شناخته‌شده به شرح زیر هستند؛ اغلب آن‌ها تنها بر فاصله‌گذاری اثر می‌گذارند، در حالی که زیرنوع “letter” از “ordinary” یک سبک قلم را نیز تعیین می‌کند.

ordinary نویسه‌ای مانند “1”، “a”، یا “!”
 letter نویسه‌ای که به‌طور پیش‌فرض مورب (ایتالیک) می‌شود
 digit ناموجود / کاربرد ندارد
operator عملگر بزرگ مانند “Σ”
binary عملگر دودویی مانند “+”
relation عملگر رابطه‌ای مانند “=”
opening قلاب یا پرانتز بازکننده مانند “(”
closing قلاب یا پرانتز بندنده مانند “)”
punctuation نویسه نشانه‌گذاری مانند “,”
inner زیرفرمول محصور درون قلاب‌ها
suppress مؤلفه‌ای که فاصله‌گذاری خودکار بر آن اعمال نمی‌شود

دو دستور اولیه انواع را به اجزای معادله اعمال می‌کنند.

نوع  t را به عبارت  e اعمال می‌کند.
به هر نویسه در متن (بدون گیومه) نوع  t را به‌صورت پایدار نسبت می‌دهد.

eqn فاصله‌گذاری‌ها و سبک‌ها را همانند دستورات زیر تنظیم می‌کند.

chartype "letter" abcdefghiklmnopqrstuvwxyz
chartype "letter" ABCDEFGHIKLMNOPQRSTUVWXYZ
chartype "letter" \[*a]\[*b]\[*g]\[*d]\[*e]\[*z]
chartype "letter" \[*y]\[*h]\[*i]\[*k]\[*l]\[*m]
chartype "letter" \[*n]\[*c]\[*o]\[*p]\[*r]\[*s]
chartype "letter" \[*t]\[*u]\[*f]\[*x]\[*q]\[*w]
chartype "binary" *\[pl]\[mi]
chartype "relation" <>\[eq]\[<=]\[>=]
chartype "opening" {([
chartype "closing" })]
chartype "punctuation" ,;:.
chartype "suppress" ^~

eqn به تمامی سایر نویسه‌های عادی و ویژه roff ، از جمله ارقام 0–9، نوع “ordinary” را اختصاص می‌دهد. (نوع “digit” استفاده نشده است، اما برای سفارشی‌سازی در دسترس است.) مطابق با رویه متداول در حروف‌چینی ریاضی، حروف کوچک یونانی (و نه حروف بزرگ)، نوع “letter” را دریافت می‌کنند تا به سبک مورب درآیند. ماکروهای تولید سه‌نقطه، “...”، cdots، و ldots، از نوع “inner” استفاده می‌کنند.

eqn بدون هیچ تغییری از دستورات اولیه eqn در AT&T پشتیبانی می‌کند: above، back، bar، bold، define، down، fat، font، from، fwd، gfont، gsize، italic، left، lineup، mark، matrix، ndefine، over، right، roman، size، sqrt، sub، sup، tdefine، to، under، و up.

دستورات اولیه افزونه گنو شامل “type” و chartype در زیربخش “فاصله‌گذاری و قلم حروف” در بالا شرح داده شدند؛ “set” و “reset” در زیربخش “سفارشی‌سازی” در ادامه؛ و gbfont، gifont، و grfont در زیربخش “قلم‌ها” در زیر آمده‌اند. در خلاصه‌های زیر، X می‌تواند هر نویسه‌ای باشد که در پارامتر محصورشده با آن ظاهر نشده است.

قرار دادن e2 به‌عنوان یک نشانه‌اعراب بر روی e1. eqn فرض می‌کند که e2 در ارتفاع مناسب برای یک حرف کوچک بدون دنباله بالارونده (ascender) قرار دارد، و آن را بر اساس ارتفاع e1 به‌صورت عمودی جابه‌جا می‌کند. برای نمونه، eqn دستور hat را به صورت زیر تعریف می‌کند:
accent { roman "^" }
دستورهای dotdot، dot، tilde، vec، و dyad نیز با استفاده از دستور اولیه accent تعریف شده‌اند.
بزرگ کردن عبارت e؛ معنایی مشابه با “large” در CSS مد نظر است. در خروجی troff ، اندازه قلم به اندازه ۵ نقطه مقیاس‌شده (scaled points) افزایش می‌یابد. خروجی MathML کد زیر را تولید می‌کند:
<mstyle mathsize='big'>
درج محتویات file، با حذف خطوطی که با .EQ یا .EN آغاز می‌شوند. فایل file نسبت به پوشه کاری جاری جستجو می‌شود.
اگر name به‌عنوان یک دستور اولیه یا ماکرو تعریف شده باشد، عبارت anything را تفسیر می‌کند.
همانند "text"، اما از آنجا که text درون گیومه نیست، مشمول بسط ماکرو می‌شود؛ شکسته نمی‌شود و فاصله میان نویسه‌ها مطابق با زیربخش “فاصله‌گذاری و قلم حروف” در بالا تنظیم نمی‌گردد.
همانند prime، اما نماد پرایم را به‌عنوان یک عملگر بر روی  e قرار می‌دهد. در ورودی “A opprime sub 1”، عدد “1” به عنوان یک زیرنویس برای “A” در زیر پرایم قرار می‌گیرد (همان‌طور که در حروف‌چینی ریاضی متداول است)، در حالی که اگر prime استفاده شود، عدد “1” زیرنویسی برای نویسه پرایم خواهد بود. تقدم opprime مشابه با bar و “under” است، و بالاتر از سایر دستورات اولیه به جز accent و uaccent می‌باشد. در متن بدون گیومه، یک آپاستروف خنثی (') که نخستین نویسه در خط ورودی نباشد، همانند opprime تلقی می‌شود.
همانند “define”، اما name در صورتی که با آرگومان فراخوانی شود به‌عنوان ماکرو شناخته نمی‌شود.
همانند over، اما اندازه قلم e1 و e2 را کاهش می‌دهد، و فاصله عمودی کمتری میان e1 و e2 و خط کسری قرار می‌دهد. دستور اولیه over متناظر با دستور اولیه \over در TeX در سبک‌های معادلات نمایشی (displayed) است؛ دستور smallover متناظر با \over در سبک‌های درون‌خطی (inline) است.
تنظیم فاصله عمودی اضافی پیرامون معادله، جایگزین مقادیر پیش‌فرض، که در آن n یک عدد صحیح برحسب صدم em است. اگر مثبت باشد، n فاصله عمودی پیش از معادله را افزایش می‌دهد؛ اگر منفی باشد، این فاصله را پس از معادله افزایش می‌دهد. این دستور اولیه یک رابط برای دنباله گریز \x در groff فراهم می‌کند، اما با قرارداد علامت معکوس. اگر معادله بخشی از یک تصویر pic(1) باشد، اثری نخواهد داشت.
ساخت یک شیء با فراخوانی troff-macro بر روی e. رشته troff به نام 0s شامل خروجی eqn برای e است، و ثبات‌های 0w، 0h، 0d، 0skern، و 0skew به ترتیب پهنا، ارتفاع، عمق، کرنینگ زیرنویس، و کجی (skew) عبارت e را در خود دارند. (مقدار کرنینگ زیرنویس یک شیء نشان می‌دهد که زیرنویس آن شیء چقدر باید به سمت داخل کشیده شود، یا به سمت چپ نسبت به یک گلیف بدون زیرنویس با همان اندازه قرار گیرد. مقدار کجی یک شیء بیانگر این است که یک نشانه‌اعراب در بالای آن، چقدر به سمت راست مرکز شیء باید قرار گیرد.) ماکرو باید 0s را به گونه‌ای تغییر دهد که نتیجه مطلوب را تولید کند، موقعیت رسم را به خط پایه متن در ابتدای e بازگرداند، و ثبات‌های پیش‌گفته را متناسب با ابعاد جدید نتیجه به‌روزرسانی نماید.
فرض کنید می‌خواهید سازه‌ای بسازید که عبارتی را با کشیدن خط مورب روی آن خط می‌زند (ابطال می‌کند).
.de Ca
.  ds 0s \
\Z'\\*(0s'\
\v'\\n(0du'\
\D'l \\n(0wu -\\n(0hu-\\n(0du'\
\v'\\n(0hu'
..
.EQ
special Ca "x \[mi] 3 \[pl] x" ~ 3
.EN
ما از نویسه‌های ویژه \[mi] و \[pl] به‌جای + و - استفاده می‌کنیم زیرا آن‌ها بخشی از آرگومان یک ماکروی troff هستند، بنابراین eqn آن‌ها را به گلیف‌های ریاضی تبدیل نمی‌کند. در اینجا سازه پیچیده‌تری آورده شده است که کادری پیرامون یک عبارت می‌کشد؛ پایین کادر روی خط پایه متن قرار می‌گیرد. ما ماکروی eqn به نام box را تعریف می‌کنیم تا فراخوانی ماکروی troff به نام Bx را کپسوله‌سازی کند.
.de Bx
.ds 0s \
\Z'\\h'1n'\\*[0s]'\
\v'\\n(0du+1n'\
\D'l \\n(0wu+2n 0'\
\D'l 0 -\\n(0hu-\\n(0du-2n'\
\D'l -\\n(0wu-2n 0'\
\D'l 0 \\n(0hu+\\n(0du+2n'\
\h'\\n(0wu+2n'
.nr 0w +2n
.nr 0d +1n
.nr 0h +1n
..
.EQ
define box ' special Bx $1 '
box(foo) ~ "bar"
.EN
همانند text، اما از آنجا که text درون گیومه است، مشمول بسط ماکرو نمی‌شود؛ شکسته می‌شود و فاصله میان نویسه‌ها بر اساس زیربخش “فاصله‌گذاری و قلم حروف” در بالا تنظیم می‌گردد.
قرار دادن e2 به‌عنوان یک نشانه‌اعراب در زیر e1. فرض می‌شود که e2 در ارتفاع مناسب برای یک حرف بدون دنباله پایین‌رونده (descender) قرار دارد؛ eqn آن را بسته به اینکه آیا e1 دارای دنباله پایین‌رونده است یا خیر، به صورت عمودی جابه‌جا می‌کند. دستور utilde به‌صورت پیش‌فرض با استفاده از uaccent به عنوان یک نشانه‌اعراب مد (tilde) زیر خط پایه تعریف شده است.
حذف تعریف ماکرو یا دستور اولیه name، و تبدیل آن به حالت تعریف‌نشده.
تراز عمودی e حول محور ریاضی (math axis)، خطی افقی که خطوط کسری و نویسه‌هایی چون “+” و “−” بر روی آن تراز می‌شوند. فرمت MathML از قبل به این شیوه رفتار می‌کند، بنابراین eqn هنگام تولید آن فرمت خروجی، این دستور اولیه را نادیده می‌گیرد. ماکروی توکار sum به شکلی مشابه تعریف زیر پیاده‌سازی شده است:
define sum ! { type "operator" vcenter size +5 \(*S } !

eqn گنو نحو برخی از دستورات اولیه eqn در AT&T را گسترش می‌دهد، و یک ناسازگاری عمدی ایجاد می‌کند.

eqn گنو آرگومان “on” را برای دستور اولیه delim به‌صورت ویژه تشخیص می‌دهد، و هرگونه جداکننده‌ای را که پیش‌تر با “delim off” غیرفعال شده بود بازمی‌گرداند. اگر جداکننده‌ای تعیین نشده باشد، هیچ‌یک از این دو دستور اثری نخواهند داشت. انتظار می‌رود اسناد اندکی از eqn از “o” و “n” به ترتیب به عنوان جداکننده‌های چپ و راست استفاده کنند. اگر سند شما چنین است، جای آن‌ها را عوض کنید یا نویسه‌های دیگری برگزینید.
مقدار عدد صحیح  n، برحسب صدم em، از دنباله گریز \x قالب‌بند برای افزایش فاصله عمودی میان سطرها استفاده می‌کند؛ eqn هنگام تولید MathML این مقدار را نادیده می‌گیرد. مقادیر منفی پذیرفته می‌شوند اما اثری ندارند. اگر بیش از یک n در یک ماتریس یا توده (pile) وجود داشته باشد، بزرگ‌ترین مقدار به‌کار گرفته می‌شود.

هنگامی که eqn ورودی troff تولید می‌کند، ظاهر معادلات توسط تعداد زیادی از متغیرها (پارامترها) کنترل می‌شود. این متغیرها هنگام تولید MathML هیچ اثری ندارند، زیرا حروف‌چینی را به موتور رندر MathML واگذار می‌کند. این پارامترها را با دستورات اولیه “set” و “reset” پیکربندی کنید.

مقدار عدد صحیح  n را به پارامتر  p اختصاص می‌دهد؛ مگر در مواردی که به گونه دیگری ذکر شود، n برحسب واحدهای صدم em تفسیر می‌گردد. برای نمونه،
set x_height 45
بیان می‌کند که eqn باید فرض کند ارتفاع x قلم برابر با 0.45 em است.
مقدار پیش‌فرض پارامتر  p را بازمی‌گرداند.

پارامترهای موجود p به شرح زیر هستند؛ مقادیر پیش‌فرض درون پرانتز نشان داده شده‌اند. هدف از این توضیحات، شرح کاربردی است تا دقت ریاضی صرف.

حداقل اندازه قلم (کف اندازه) را (برحسب نقاط مقیاس‌شده) برای حروف‌چینی معادلات تعیین می‌کند (5).
دستور اولیه fat با چاپ مجدد دو نسخه از معادله با افست افقی به این میزان، معادله را توپر (بولد) می‌کند (4). هنگام تولید خروجی MathML، مؤلفه‌هایی که fat_offset بر آن‌ها اعمال می‌شود به‌جای آن از دستور زیر استفاده می‌کنند:
<mstyle mathvariant='double-struck'>
یک خط کسری به میزان دو برابر این مقدار، از بیشینه پهنای صورت و مخرج کسر بلندتر است؛ به بیان دیگر، حداقل به این میزان از صورت و مخرج بیرون می‌زند (0).
هنگامی که bar یا under بر روی یک نویسه منفرد اعمال می‌شود، طول خط به این اندازه خواهد بود (31). به‌طور معمول، bar یا under خطی تولید می‌کند که طول آن برابر با پهنای شیء مورد نظر است؛ در مورد یک نویسه تک، این حالت معمولاً خطی ایجاد می‌کند که بیش از حد طولانی به نظر می‌رسد.
جداکننده‌های امتدادپذیر تولیدشده با دستورات اولیه left و right دارای مجموع ارتفاع و عمقی حداقل برابر با این تعداد هزارم از دو برابر بیشترین مقداری هستند که زیرمعادله محصورشده از محور فاصله می‌گیرد (900).
جداکننده‌های امتدادپذیر تولیدشده با دستورات اولیه left و right دارای مجموع ارتفاع و عمقی نه کمتر از تفاضل دو برابر بیشترین فاصله زیرمعادله محصورشده از محور و این مقدار هستند (50).
این مقدار فاصله افقی در دو طرف یک کسر درج می‌شود (12).
پهنای زیرنویس‌ها و بالانویس‌ها به این میزان افزایش می‌یابد (5).
این مقدار فاصله به‌طور خودکار پس از نویسه‌های نشانه‌گذاری درج می‌شود (17).
این مقدار فاصله به‌طور خودکار در دو طرف عملگرهای دودویی درج می‌شود (22).
این مقدار فاصله به‌طور خودکار در دو طرف عملگرهای رابطه‌ای درج می‌شود (28).
پهنای فاصله ایجادشده توسط نشانه ^ را پیکربندی می‌کند (17).
پهنای فاصله ایجادشده توسط نشانه ~ را پیکربندی می‌کند (28).
ارتفاع حروف کوچک بدون دنباله بالارونده مانند “x” (45).
ارتفاع مرکز نویسه‌هایی مانند “+” و “−” از خط پایه (26). بسیار مهم است که این مقدار برای قلم مورد استفاده شما درست تنظیم شده باشد.
این مقدار باید برابر با ضخامت نویسه \[ru] ، یا ضخامت خطوط افقی تولیدشده با دنباله گریز \D تنظیم شود (4).
دستور اولیه over صورت کسر را حداقل به این مقدار بالا می‌برد (70).
دستور اولیه smallover صورت کسر را حداقل به این مقدار بالا می‌برد (36).
دستور اولیه over مخرج کسر را حداقل به این مقدار پایین می‌برد (70).
دستور اولیه smallover مخرج کسر را حداقل به این مقدار پایین می‌برد (36).
به‌طور معمول بالانویس‌ها حداقل به این مقدار بالا برده می‌شوند (42).
بالانویس‌ها درون بالانویس‌های دیگر یا حدهای بالایی یا صورت کسرهای smallover حداقل به این مقدار بالا برده می‌شوند (37). به‌طور معمول، این مقدار کمتر از sup1 است.
بالانویس‌ها درون مخرج‌ها یا رادیکال‌ها یا زیرنویس‌ها یا حدهای پایینی حداقل به این مقدار بالا برده می‌شوند (28). به‌طور معمول، این مقدار کمتر از sup2 است.
زیرنویس‌ها به‌طور معمول حداقل به این مقدار پایین برده می‌شوند (20).
هنگامی که هم زیرنویس و هم بالانویس وجود دارد، زیرنویس حداقل به این مقدار پایین برده می‌شود (23).
خط پایه یک بالانویس حداکثر به این میزان پایین‌تر از بالای شیئی است که بالانویس بر آن قرار می‌گیرد (38).
خط پایه یک زیرنویس حداقل به این میزان پایین‌تر از کف شیئی است که زیرنویس بر آن قرار می‌گیرد (5).
خط پایه یک حد بالایی حداقل به این مقدار بالاتر از بالای شیئی است که حد بر آن اعمال می‌شود (11).
خط پایه یک حد پایینی حداقل به این مقدار پایین‌تر از کف شیئی است که حد بر آن اعمال می‌شود (17).
کف یک حد بالایی حداقل به این مقدار بالاتر از بالای شیئی است که حد بر آن اعمال می‌شود (20).
بالای یک حد پایینی حداقل به این مقدار پایین‌تر از کف شیئی است که حد بر آن اعمال می‌شود (60).
این مقدار فاصله عمودی در بالا و پایین حدها افزوده می‌شود (10).
خطوط پایه سطرها در یک توده (pile) یا ماتریس به‌طور معمول این مقدار از یکدیگر فاصله دارند (140). معمولاً برابر با مجموع num1 و denom1 است.
نقطه میانی میان خط پایه بالا و خط پایه پایین در یک ماتریس یا توده به این میزان از محور پایین برده می‌شود (26). معمولاً برابر با axis_height است.
این مقدار فاصله میان ستون‌ها در یک ماتریس افزوده می‌شود (100).
این مقدار فاصله در هر طرف یک ماتریس افزوده می‌شود (17).
اگر غیرصفر باشد، eqn خطوط را با استفاده از دنباله گریز \D در troff رسم می‌کند، به‌جای استفاده از دنباله گریز \l و نویسه ویژه \[ru] . فایل eqnrc مقدار پیش‌فرض را تعیین می‌کند: 1 روی دستگاه‌های ps، html و X11، و در غیر این صورت 0.
ارتفاع مفروض یک معادله بالای خط پایه متن است؛ eqn هر مقدار اضافی را به عنوان فاصله پیش‌خط عمودی اضافه با دنباله گریز \x در troff اضافه می‌کند (85).
عمق مفروض یک معادله زیر خط پایه متن است؛ eqn هر مقدار اضافی را به عنوان فاصله پس‌خط عمودی اضافه با دنباله گریز \x در troff اضافه می‌کند (35).
اگر غیرصفر باشد، دستور ndefine همانند define رفتار می‌کند و tdefine نادیده گرفته می‌شود؛ در غیر این صورت tdefine همانند define رفتار می‌کند و ndefine نادیده گرفته می‌شود. فایل eqnrc مقدار پیش‌فرض را تعیین می‌کند: 1 روی دستگاه‌های ascii، latin1 و utf8 ، و در غیر این صورت 0.

در eqn گنو، ماکروها می‌توانند آرگومان بپذیرند. کلمه‌ای که با هر یک از دستورات اولیه define، ndefine، یا tdefine تعریف شده باشد و بلافاصله پس از آن یک پرانتز باز بیاید، به عنوان یک فراخوانی ماکروی دارای پارامتر تلقی می‌شود: نشانه‌های بعدی تا پرانتز بسته متناظر، به عنوان آرگومان‌های جداشده با کاما در نظر گرفته می‌شوند. تنها در این زمینه، کاماها و پرانتزها نیز به عنوان جداکننده نشانه‌ها عمل می‌کنند. یک آرگومان ماکرو با کامای درون پرانتزهای تودرتو خاتمه نمی‌یابد. در تعریف ماکرو، $n، که در آن n بین ۱ تا ۹ (شامل خود آن‌ها) است، با آرگومان n‌ام جایگزین می‌شود؛ اگر کمتر از n آرگومان وجود داشته باشد، با هیچ جایگزین می‌گردد.

eqn گنو از ماکروهای از پیش تعریف‌شده ارائه‌شده توسط eqn در AT&T پشتیبانی می‌کند: and، approx، arc، cos، cosh، del، det، dot، dotdot، dyad، exp، for، grad، half، hat، if، inter، Im، inf، int، lim، ln، log، max، min، nothing، partial، prime، prod، Re، sin، sinh، sum، tan، tanh، tilde، times، union، vec، ==، !=، +=، ->، <-، <<، >>، و “...”. حروف کوچک یونانی کلاسیک به صورت alpha، beta، chi، delta، epsilon، eta، gamma، iota، kappa، lambda، mu، nu، omega، omicron، phi، pi، psi، rho، sigma، tau، theta، upsilon، xi، و zeta در دسترس هستند. برای به دست آوردن اشکال بزرگ، آن‌ها را با حرف اول بزرگ (Alpha) یا تماماً با حروف بزرگ (ALPHA) بنویسید.

eqn گنو همچنین ماکروهای cdot، cdots، و utilde (همگی در بالا توضیح داده شدند)، dollar، که علامت دلار را درج می‌کند، و ldots، که سه‌نقطه روی خط پایه متن قرار می‌دهد را تعریف می‌کند.

eqn از حداکثر سه سبک قلم (تایپ‌فیس) برای چیدن معادله استفاده می‌کند: مورب / ایتالیک (oblique)، ایستاده / رومن (upright)، و توپر / بولد (heavy). با دستورات اولیه افزونه گنو grfont، gifont، و gbfont به هر یک قلمی از groff اختصاص دهید. مقادیر پیش‌فرض سبک‌های R، I، و B (اعمال‌شده بر خانواده قلم جاری) هستند. دستور اولیه chartype (به بالا رجوع شود) نوع نویسه را تعیین می‌کند، که قلم مورد استفاده برای چیدن آن را مشخص می‌سازد. نوع “letter” به صورت مورب چیده می‌شود؛ انواع دیگر به صورت رومن چیده می‌شوند. از دستور اولیه bold برای انتخاب سبک بولد (ایستاده) استفاده کنید.

انتخاب f به‌عنوان قلم بولد.
انتخاب f به‌عنوان قلم مورب (ایتالیک). eqn گنو gfont را به عنوان مترادفی برای سازگاری با AT&T می‌شناسد.
انتخاب f به‌عنوان قلم رومن.

رشته 10 معادله‌ای را که اخیراً قالب‌بندی شده است ذخیره می‌کند. ثبات MK موقعیت رسم افقی آخرین علامت (mark) اختصاص داده‌شده را ذخیره می‌نماید. از استفاده از این نام‌ها برای هر منظور دیگری خودداری کنید.

eqn گنو در درون خود از نام‌های ثبات، رشته، ماکرو، و انحرافی (diversion) استفاده می‌کند که با رقم 0 آغاز می‌شوند. (در eqn مربوط به AT&T از شناسه‌هایی استفاده می‌شد که با رقم 1 شروع می‌شدند.) سندی که قرار است با eqn گنو پیش‌پردازش شود نباید از چنین شناسه‌هایی استفاده کند.

گزینه --help پیام راهنمای نحوه استفاده را نمایش می‌دهد، در حالی که -v و --version اطلاعات نسخه را نشان می‌دهند؛ سپس همگی از برنامه خارج می‌شوند.

شناسایی .EQ و .EN حتی زمانی که نویسه‌ای به غیر از فاصله یا خط جدید به دنبال آن‌ها آمده باشد.
تعیین جداکننده‌های x برای ابتدای چپ و y برای انتهای راست معادلاتی که در میان .EQ/.EN محصور نشده‌اند. نیازی نیست که x و y متفاوت باشند. هر دستور “delim xy” در فایل منبع بر این گزینه برتری دارد.
معادل با “gifont F” است.
معادل با “set minimum_size n” است.
جستجوی eqnrc در پوشه dir پیش از پوشه‌های ذکرشده در بخش “توضیحات” در بالا.
ممنوعیت خطوط جدید در میان جداکننده‌ها، که به eqn امکان می‌دهد در صورت جا افتادن جداکننده پایانی، خطا را بهتر مدیریت کند.
تنظیم زیرنویس‌ها و بالانویس‌ها به میزان n نقطه کوچک‌تر از متن اطراف. این گزینه منسوخ شده است. eqn به‌طور معمول زیرنویس‌ها و بالانویس‌ها را در ۷۰٪ اندازه قلم متن پیرامون تنظیم می‌کند.
کاهش اندازه قلم بالانویس‌ها و زیرنویس‌ها حداکثر یک بار نسبت به اندازه قلم پایه.
عدم بارگذاری فایل eqnrc.
معادل با “gsize n” است. این گزینه منسوخ شده است.
آماده‌سازی خروجی برای دستگاه dev. این گزینه ماکرویی به نام dev با مقدار 1 تعریف می‌کند؛ بدین ترتیب eqnrc تعاریف مناسب برای آن دستگاه را فراهم می‌سازد. با این حال، اگر dev برابر با “MathML” باشد، eqn خروجی را به آن زبان به‌جای roff تولید می‌کند، و فایل eqnrc را بارگذاری نمی‌نماید. دستگاه پیش‌فرض ps است.

eqn در صورت اجرای موفق با وضعیت 0، اگر نتواند آرگومان‌های خط فرمان را تفسیر کند با وضعیت 2، و در صورتی که در طول اجرا با خطایی روبرو شود با وضعیت 1 خارج می‌شود.

/usr/share/groff/1.24.1/tmac/eqnrc
پیش‌پردازنده را برای خروجی troff مقداردهی اولیه می‌کند. هرگونه ورودی معتبر eqn پذیرفته می‌شود.

طراحی MathML بر این فرض استوار است که نمی‌تواند ویژگی‌های فیزیکی دقیق رسانه‌ها و دستگاه‌هایی را که بر روی آن‌ها رندر می‌شود بداند. این قالب از کنترل جابه‌جایی‌ها و اندازه‌ها به همان میزانی که troff انجام می‌دهد پشتیبانی نمی‌کند.

•
پارامترهای رندرینگ eqn گنو (به بخش “سفارشی‌سازی” در بالا رجوع کنید) هیچ تاثیری بر MathML تولیدشده ندارند.
•
دستورات اولیه special، up، down، fwd، و back قابل پیاده‌سازی نیستند، و در عوض پیام “<merror>” در MathML تولید می‌کنند.
•
دستور اولیه vcenter بدون هشدار نادیده گرفته می‌شود، زیرا تراز وسط بر روی محور ریاضی، رفتار پیش‌فرض MathML است.
•
نویسه‌هایی که eqn آن‌ها را در خروجی troff بسیار بزرگ چیدمان می‌کند—به‌ویژه علامت انتگرال—ممکن است بیش از حد کوچک به نظر برسند و نیاز باشد که پوشش‌های “<mstyle>” آن‌ها به‌صورت دستی تنظیم شوند.

همانند تولید خروجی troff ، eqn کدهای MathML تولید می‌کند که نشانه‌های .EQ و .EN را در جای خود باقی می‌گذارد، اما هیچ کدی متناظر با جداکننده‌های delim تولید نمی‌کند. با این حال، می‌توان آن‌ها را به عنوان دنباله‌های نویسه‌ای که با “<math>” آغاز می‌شوند، با “</math>” پایان می‌یابند و از مرزهای خطوط فراتر نمی‌روند شناسایی کرد.

نشانه‌ها در ورودی eqn اگر قرار نیست به عنوان نام ماکروها یا دستورات اولیه شناخته شوند، یا اگر قرار است توسط troff تفسیر گردند، باید درون گیومه دوتایی قرار گیرند. به‌ویژه، نشانه‌های کوتاه، مانند “pi” و “PI”، می‌توانند با شناسه‌های troff تداخل پیدا کنند. برای نمونه، فرمان “gifont PI” در eqn قلم مورب Palatino مربوط به دستگاه gropdf(1) یا grops(1) را به‌عنوان قلم مورب سراسری انتخاب نمی‌کند؛ بلکه باید به‌جای آن از “gifont "PI"” استفاده کنید.

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

برخلاف TeX، برنامه eqn به‌طور ذاتی سبک‌های معادلات نمایشی (displayed) و درون‌خطی (inline) را از یکدیگر متمایز نمی‌سازد؛ دستور اولیه smallover در بالا را ببینید. با این حال، بسته‌های ماکرو غالباً ماکروهای EQ و EN را به گونه‌ای تعریف می‌کنند که معادله درون آن‌ها به‌صورت نمایشی چیده شود. این ماکروها ممکن است آرگومان‌هایی برای برچسب‌گذاری یا زیرنویس معادله بپذیرند؛ مستندات بسته مورد نظر را ببینید.

برنامه eqn در اصطلاحات زیاده‌روی می‌کند—«معادلات» آن می‌توانند نابرابری‌ها، عبارات ساده، یا عباراتی نامفهوم باشند. اما اکنون دیگر امکان تغییر آن وجود ندارد.

هنگام تولید خروجی ترمینال، eqn گنو حروف کوچک یونانی را به‌جای سبک مورب، به سبک رومن رندر می‌کند.

هنگام تولید خروجی MathML، قابلیت‌های mark و lineup کار نمی‌کنند. این موارد، در تئوری، می‌توانند با عناصر “<maligngroup>” پیاده‌سازی شوند.

هنگام تولید خروجی MathML، هر رقم از یک مقدار عددی یک جفت “<mn></mn>” جداگانه دریافت می‌کند، و ممیزهای اعشاری با “<mo></mo>” برچسب‌گذاری می‌شوند. این امر توسط مشخصات استاندارد مجاز دانسته شده است، اما ناکارآمد است.

نخست کاربرد eqn را با یک اتحاد مثلثاتی نشان می‌دهیم.

.EQ
sin ( alpha + beta ) = sin alpha cos beta + cos alpha sin beta
.EN

اگر محتوای ریاضی به‌طور مکرر در متن جاری ظاهر شود، تعیین جداکننده‌ها می‌تواند مناسب و سودمند باشد.

.EQ
delim $$
.EN
Having cached a table of logarithms,
the property $ln ( x y ) = ln x + ln y$ sped calculations.

فرمول معادله درجه دوم فرصتی برای استفاده از کسرها، رادیکال‌ها، و نشانه فاصله کامل ~ فراهم می‌کند.

.EQ
x = { - b ~ \[+-] ~ sqrt { b sup 2 - 4 a c } } over { 2 a }
.EN

به‌عنوان روشی دیگر، می‌توانستیم علامت مثبت-منفی را به عنوان یک عملگر دودویی تعریف کنیم. فاصله‌گذاری خودکار در دو طرف علامت مثبت-منفی، 0.06 em فاصله کمتری نسبت به ~ قرار می‌دهد؛ این مقدار تفاوت میان پهنای پارامتر medium_space مورداستفاده در عملگرهای دودویی و فاصله کامل است. به‌طور مستقل، می‌توانیم ماکروی “frac” را برای چیدن کسرها تعریف نماییم.

.EQ
chartype "binary" \[+-]
define frac ! { $1 } over { $2 } !
x = frac(- b \[+-] sqrt { b sup 2 - 4 a c }, 2 a)
.EN

“Typesetting Mathematics—User's Guide” (2nd edition), by Brian W. Kernighan and Lorinda L. Cherry, 1978, AT&T Bell Laboratories Computing Science Technical Report No. 17.

The TeXbook, by Donald E. Knuth, 1984, Addison-Wesley Professional. ضمیمه G بسیاری از پارامترهای بخش “سفارشی‌سازی” در بالا را با جزئیات بیشتر بررسی می‌کند.

groff_char(7) انواع دنباله‌های گریز نویسه‌های ویژه را که در حروف‌چینی ریاضی مفید هستند مستند می‌کند. به‌ویژه به زیربخش‌های “نمادهای منطقی”، “نمادهای ریاضی”، و “گلیف‌های یونانی” مراجعه کنید.

groff(1)، troff(1)، pic(1)، groff_font(5)

2026-03-15 groff 1.24.1