groff_out(5) File Formats Manual groff_out(5)

groff_out - زبان مستقل از دستگاه شرح صفحه در GNU roff

عملیات بنیادین فرمت‌کننده GNU troff، troff(1)، ترجمه زبان ورودی groff(7) به مجموعه‌ای از دستورالعمل‌ها است که عمدتاً مربوط به قرار دادن گلیف‌ها یا اشکال هندسی در موقعیت‌های مشخصی روی یک صفحه مستطیلی هستند. در بحث پیش‌رو، اصطلاح دستور به این زبان خروجی مستقل از دستگاه اشاره دارد، و هرگز به زبانی که برای استفاده نویسندگان سند در نظر گرفته شده اشاره نمی‌کند. دستورات خروجی مستقل از دستگاه شامل چندین دسته هستند: خروجی گلیف؛ انتخاب قلم، رنگ و اندازه متن؛ حرکت موقعیت رسم؛ پیشروی صفحه؛ رسم اشکال هندسی پایه؛ و دستورات توسعه دستگاه، که دسته‌ای فراگیر برای سایر عملیات است. دسته آخر شامل دستوراتی برای شروع و توقف خروجی، تعیین دستگاه خروجی مورد نظر، و جاسازی ابرپیوندهای URL در فرمت‌های خروجی پشتیبانی‌شده است.

از آنجا که groff(1) یک برنامه پوششی در اطراف GNU troff است و به‌طور خودکار یک درایور خروجی را فراخوانی می‌کند، کاربران در شرایط عادی به ندرت با این فرمت روبرو می‌شوند. groff گزینه -Z را برای مهار پس‌پردازش ارائه می‌دهد تا خروجی GNU troff درست مانند زمان اجرای مستقیم آن، به جریان خروجی استاندارد ارسال شود.

هدف از خروجی مستقل از دستگاه، تسهیل توسعه پس‌پردازنده‌ها با ارائه یک رابط برنامه‌نویسی مشترک برای تمامی دستگاه‌ها است. این یک زبان مجزا و بسیار ساده‌تر از زبان فرمت‌کننده (troff) است. خروجی مستقل از دستگاه را می‌توان نوعی «زبان توصیف صفحه» در نظر گرفت.

در بحث پیش‌رو، اصطلاح خروجی troff آنچه توسط GNU troff خروجی داده می‌شود را توصیف می‌کند، در حالی که شرح صفحه بیانگر زبانی است که توسط تجزیه‌کننده‌ای که این خروجی را برای درایورهای خروجی تفسیر می‌کند پذیرفته می‌شود. این تجزیه‌کننده، فاصله‌های خالی را بسیار انعطاف‌پذیرتر از پیاده‌سازی AT&T troff پردازش می‌کند، توسعه‌های گنو به زبان را می‌شناسد، و برای سازگاری از کدگذاری فشرده و قدیمی زیرمجموعه‌ای از دستورات پشتیبانی می‌کند؛ در غیر این صورت، فرمت‌ها یکسان هستند. (تجزیه‌کننده خروجی مستقل از دستگاه را می‌توان در سورس‌های groff در مسیر src/libs/libdriver/input.cpp یافت).

هنگامی که برایان کرنیهان زبان شرح صفحه مستقل از دستگاه AT&T troff را در حدود سال ۱۹۸۰ طراحی کرد، مجبور بود خوانایی و نگهداری‌پذیری را در برابر محدودیت‌های شدید اندازه فایل و سرعت انتقال به دستگاه خروجی متعادل کند. یک دهه بعد، زمانی که جیمز کلارک groff را نوشت، این محدودیت‌ها دیگر چندان سخت‌گیرانه نبودند.

زبان توصیف صفحه roff دنباله‌ای از نشانه‌ها (tokens) است: دستورات تک‌حرفی یا آرگومان‌های آنها. برخی از دستورات یک زیردستور را به عنوان آرگومان اول می‌پذیرند که پس از آن یک یا چند آرگومان دیگر قرار می‌گیرد.

نسخه مستقل از دستگاه AT&T troff هنگام تولید خروجی، حداقل فاصله خالی را به کار می‌برد. در مقابل، GNU troff تلاش می‌کند خروجی خود را برای انسان خواناتر سازد. کاراکترهای فاصله خالی—تب، فاصله و خط جدید—همیشه معنادار هستند. آنها هرگز برای نمایش فاصله‌گذاری در سند استفاده نمی‌شوند؛ این کار با دستورات موقعیت‌یابی افقی (h, H) و عمودی (v, V) انجام می‌شود. هر دنباله‌ای از کاراکترهای فاصله یا تب معادل یک فاصله تکی است و دستورات را از آرگومان‌ها و آرگومان‌ها را از یکدیگر جدا می‌کند. فاصله فقط در جایی الزامی است که حذف آن باعث ابهام شود. شکست خط دستورات را از یکدیگر جدا می‌کند. کاراکتر کامنت، علامت هش/پوند (#) است و بقیه خط را به عنوان یادداشت مشخص می‌کند. خطی که پس از حذف کامنت فقط شامل فاصله‌های خالی باشد کاری جز جداسازی نشانه‌های ورودی انجام نمی‌دهد.

به عنوان مثال، دستور حرکت افقی نسبی (h) و دستور نوشتن یک گلیف (c)، هر کدام یک آرگومان واحد می‌گیرند؛ اولی یک عدد صحیح علامت‌دار، و دومی یک کاراکتر قابل چاپ ISO 646/«ASCII». یک سری از چنین دستوراتی می‌تواند بدون فاصله روی یک خط ورودی معتبر باشد، اما GNU troff پس از هر یک از آنها یک خط جدید درج می‌کند.

برخی از دستورات نحو پیچیده‌تری دارند؛ دستور الحاقی GNU troff برای نوشتن دنباله‌ای از گلیف‌ها (t) تعداد متغیری از آرگومان‌ها را می‌پذیرد. دستوراتی که اشکال هندسی رسم می‌کنند (D) یا دستگاه را کنترل می‌کنند (x) همچنین آرگومان‌های زیردستور را شناسایی می‌کنند. بنابراین چنین دستوراتی باید با یک خط جدید پایان یابند. در GNU troff، زیردستور توسعه دستگاه “x X” به طور منحصربه‌فرد از نحو ادامه خط پشتیبانی می‌کند؛ در حالی که هر دستور دیگری در یک خط ورودی واحد قرار می‌گیرد.

برخی از دستورات آرگومان‌های عدد صحیح را می‌پذیرند که نشان‌دهنده مقادیر اندازه‌گیری هستند، اما واحدهای مقیاس‌پذیری زبان فرمت‌کننده هرگز استفاده نمی‌شوند. اکثر دستورات واحد مقیاس‌پذیری “u” (واحدهای پایه) را فرض می‌کنند و سایر دستورات از “s” (نقاط مقیاس‌شده) استفاده می‌کنند. این موارد توسط پارامترهای مشخص‌شده در فایل DESC دستگاه تعریف می‌شوند؛ به groff_font(5) و برای اطلاعات بیشتر در مورد واحدهای مقیاس‌پذیری به groff(7) و Groff: The GNU Implementation of troff، راهنمای Texinfo groff، مراجعه کنید. دستورات مربوط به رنگ از اعداد صحیح بدون بعد استفاده می‌کنند.

توجه داشته باشید که کاراکترهای تکی و همچنین نام قلم‌ها و کاراکترهای ویژه (یعنی گلیف‌ها) می‌توانند بیت هشتم فعال داشته باشند. نام‌های گلیف‌ها و قلم‌ها می‌توانند طول دلخواه داشته باشند. گلیفی که قرار است چاپ شود همیشه در قلم فعلی خواهد بود.

یک آرگومان رشته‌ای همیشه با کاراکتر فاصله خالی بعدی (فاصله، تب یا خط جدید) خاتمه می‌یابد؛ کاراکتر تعبیه‌شده # به عنوان بخشی از آرگومان در نظر گرفته می‌شود، نه شروع یک دستور کامنت. یک آرگومان عددی صحیح با اولین کاراکتر غیررقم بعدی خاتمه می‌یابد، که سپس به عنوان اولین کاراکتر آرگومان یا دستور بعدی در نظر گرفته می‌شود.

خروجی مستقل از دستگاه troff به سه بخش سازماندهی می‌شود: یک سرآیند (header)، بدنه (body)، و یک تریلر (trailer).

وظیفه سرآیند، تنظیم پارامترهای عمومی دستگاه است. GNU troff تضمین می‌کند که سرآیند آن از سه خط زیر تشکیل شده است:

x T device
x res n h v
x init

با پارامترهای n، h و v که مطابق با زیربخش «دستورات کنترل دستگاه» در ادامه تنظیم شده‌اند. تجزیه‌کننده فرمت زبان توصیف صفحه مستقل از دستگاه قادر به تفسیر فاصله‌های خالی و کامنت‌های اضافی حتی در سرآیند نیز می‌باشد.

بدنه شامل محتوای قابل مشاهده سند است. به محض اینکه درایور خروجی دستور “x init” را تفسیر کرد، آماده رسیدگی به دستورات به طور کلی می‌شود. پردازش زمانی خاتمه می‌یابد که دستور “x stop” مشاهده شود؛ آخرین خط هر خروجی شرح صفحه GNU troff همیشه حاوی چنین دستوری است.

از نظر معنایی، بدنه صفحه-محور است. دستور p یک صفحه جدید را آغاز می‌کند. دستورات موقعیت‌یابی، نوشتن و رسم درون یک صفحه اجرا می‌شوند، بنابراین نمی‌توانند قبل از اولین دستور p ظاهر شوند. درایور خروجی موقعیت‌یابی مطلق را (با دستورات H و V) نسبت به مبدأ صفحه فعلی در گوشه بالا-چپ، و تمامی موقعیت‌یابی‌های دیگر را نسبت به موقعیت رسم روی صفحه محاسبه می‌کند.

تریلر موقعیت رسم را به پایین صفحه می‌برد و به دستگاه اطلاع می‌دهد که سند (یا «کار») به پایان رسیده است.

این بخش تمامی دستورات خروجی توصیف صفحه را توصیف می‌کند، هم دستورات مربوط به AT&T troff و هم دستورات توسعه‌یافته صادرشده توسط GNU troff.

#anything⟨line-break⟩
اعمال یادداشت یا کامنت. نادیده گرفتن تمام کاراکترها از کاراکتر # تا خط جدید بعدی. هر کامنت می‌تواند با فاصله نحوی دلخواه شروع شود، و هر دستوری می‌تواند با یک کامنت خاتمه یابد.

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

حروف‌چینی گلیف کاراکتر ویژه id. فاصله نحوی انتهایی برای مجاز دانستن نام‌های کاراکترهای ویژه با طول دلخواه الزامی است. موقعیت رسم پیشروی نمی‌کند.
حروف‌چینی گلیف کاراکتر معمولی  c. موقعیت رسم پیشروی نمی‌کند.
انتخاب قلم سوارشده در موقعیت  n. مقدار n نمی‌تواند منفی باشد.
حرکت افقی موقعیت رسم به مقدار n واحد پایه از لبه سمت چپ صفحه. مقدار n نمی‌تواند منفی باشد.
حرکت موقعیت رسم به اندازه n واحد پایه به سمت راست. در AT&T troff مقادیر منفی n مجاز بود؛ GNU troff چنین مقادیری را تولید نمی‌کند، اما کتابخانه درایور خروجی groff با آنها کار می‌کند.
انتخاب رنگ خط رسم با استفاده از مولفه‌های component در فضای رنگ scheme. هر component یک عدد صحیح بین 0 و 65536 است. تعداد مولفه‌ها و معانی آنها در هر scheme متفاوت است. این دستور یکی از الحاقات groff است.
استفاده از طرح رنگ CMY با مولفه‌های فیروزه‌ای (cyan)، سرخابی (magenta) و زرد (yellow).
استفاده از رنگ پیش‌فرض (بدون مولفه؛ در بیشتر موارد سیاه).
استفاده از طرح رنگ در مقیاس خاکستری با یک مولفه بین 0 (سیاه) و 65536 (سفید).
استفاده از طرح رنگ CMYK با مولفه‌های فیروزه‌ای (cyan)، سرخابی (magenta)، زرد (yellow) و سیاه (black).
استفاده از طرح رنگ RGB با مولفه‌های قرمز (red)، سبز (green) و آبی (blue).
حروف‌چینی گلیف با نمایه  n در قلم فعلی. n معمولاً یک عدد صحیح غیرمنفی است. موقعیت رسم پیشروی نمی‌کند. دستگاه‌های html و xhtml از این دستور با n منفی برای تولید فاصله نشکن استفاده می‌کنند؛ مقدار مطلق n گرفته شده و در واحدهای پایه تفسیر می‌شود.
n b a
نشان‌دهنده یک شکست (break). هیچ عملی انجام نمی‌شود؛ این دستور برای آسان‌تر کردن تجزیه خروجی وجود دارد. اعداد صحیح b و a به ترتیب مقادیر فضای عمودی قبل و بعد از شکست را توصیف می‌کنند. GNU troff این دستور را صادر می‌کند اما کتابخانه درایور خروجی groff آن را نادیده می‌گیرد. به v و V مراجعه کنید.
شروع یک صفحه جدید و تنظیم شماره آن به  n. هر صفحه مستقل است، حتی از صفحاتی که از همان شماره استفاده می‌کنند. موقعیت رسم عمودی روی 0 تنظیم می‌شود. تمامی دستورات موقعیت‌یابی، نوشتن و رسم در چارچوب یک صفحه تفسیر می‌شوند، بنابراین دستور p باید مقدم بر آنها باشد.
تنظیم اندازه حروف به n نقطه مقیاس‌شده (واحد z در GNU troff). در AT&T troff در عوض از نقاط مقیاس‌نشده (p) استفاده می‌شد؛ بخش «سازگاری» در ادامه را ببینید.
حروف‌چینی کلمه xyz؛ یعنی قرار دادن دنباله‌ای از گلیف‌های معمولی به نام‌های x، y، z، ...، که با یک فاصله یا خط جدید خاتمه می‌یابد؛ یک آرگومان عدد صحیح دوم اختیاری نادیده گرفته می‌شود (این به فرمت‌کننده اجازه می‌دهد تعداد زوجی از آرگومان‌ها را تولید کند). هر گلیف در موقعیت رسم فعلی قرار می‌گیرد، و سپس موقعیت به اندازه عرض گلیف به صورت افقی به جلو حرکت می‌کند. عرض یک گلیف از معیارهای آن در فایل شرح قلم خوانده می‌شود، به اندازه حروف فعلی مقیاس می‌گردد، و به ضریبی از کوانتوم حرکت افقی گرد می‌شود. از دستور C برای درج گلیف‌های کاراکترهای ویژه استفاده کنید. دستور t یکی از الحاقات groff است و فقط برای دستگاه‌هایی خروجی داده می‌شود که فایل DESC آنها حاوی دستورالعمل tcommand باشد؛ به groff_font(5) مراجعه کنید.
حروف‌چینی کلمه xyz با فاصله‌گذاری بین‌حروفی پیوسته (track kerning). مانند t، اما پس از قرار دادن هر گلیف، موقعیت رسم به اندازه n واحد پایه دیگر به صورت افقی به جلو رانده می‌شود. دستور u یکی از الحاقات groff است و فقط برای دستگاه‌هایی خروجی داده می‌شود که فایل DESC آنها حاوی دستورالعمل tcommand باشد؛ به groff_font(5) مراجعه کنید.
حرکت عمودی موقعیت رسم به مقدار n واحد پایه از لبه بالای صفحه. مقدار n نمی‌تواند منفی باشد.
حرکت موقعیت رسم به اندازه n واحد پایه به سمت پایین. در AT&T troff مقادیر منفی n مجاز بود؛ GNU troff چنین مقادیری را تولید نمی‌کند، اما کتابخانه درایور خروجی groff با آنها کار می‌کند.
نشان‌دهنده یک فاصله بین‌کلمه‌ای. هیچ عملی انجام نمی‌شود؛ این دستور برای آسان‌تر کردن تجزیه خروجی وجود دارد. فقط فاصله‌های بین‌کلمه‌ای در یک خط خروجی (چه شکست‌پذیر باشند چه نباشند) به این صورت توصیف می‌شوند؛ فاصله‌های ناشی از توالی‌های گریز حرکت افقی توصیف نمی‌شوند. GNU troff این دستور را صادر می‌کند اما کتابخانه درایور خروجی groff آن را نادیده می‌گیرد. به h و H مراجعه کنید.

هر دستور گرافیکی یا طراحی در زبان توصیف صفحه با حرف “D” آغاز می‌شود، و به دنبال آن یک یا دو کاراکتر می‌آید که یک زیردستور را مشخص می‌کنند؛ سپس تعداد ثابت یا متغیری آرگومان عدد صحیح که با یک کاراکتر فاصله تکی از هم جدا شده‌اند قرار می‌گیرد. یک دستور “D” نمی‌تواند در همان خط با دستور دیگری دنبال شود (به جز یک کامنت)، بنابراین هر دستور “D” با یک شکست خط نحوی پایان می‌یابد.

خروجی GNU troff از قراردادهای خروجی AT&T troff پیروی می‌کند (هیچ فاصله‌ای بین دستور و زیردستور وجود ندارد، تمام آرگومان‌ها با یک کاراکتر فاصله تکی آغاز می‌شوند)، اما تجزیه‌کننده groff اجازه می‌دهد بین حروف دستور فاصله اختیاری وجود داشته باشد و فاصله قبل از اولین آرگومان را اختیاری می‌داند. طبق معمول، هر فاصله می‌تواند هر دنباله‌ای از کاراکترهای تب و فاصله باشد.

برخی از دستورات گرافیکی می‌توانند تعداد متغیری آرگومان بگیرند. در این حالت، آنها اعداد صحیحی هستند که اندازه‌ای را بر حسب واحدهای پایه u نشان می‌دهند. آرگومان‌های h نشان‌دهنده فاصله‌های افقی هستند که در آن مقادیر مثبت به معنای راست و مقادیر منفی به معنای چپ است. آرگومان‌های v نشان‌دهنده فاصله‌های عمودی هستند که در آن مقادیر مثبت به معنای پایین و مقادیر منفی به معنای بالا است. تمامی این فاصله‌ها انحرافاتی نسبت به مکان فعلی هستند.

هر دستور گرافیکی مستقیماً با یک توالی گریز \D در troff مطابقت دارد. زیربخش «دستورات طراحی» در groff(7) را ببینید.

مگر در مواردی که خلاف آن ذکر شده باشد، هر دستور گرافیکی مستقیماً با یک توالی گریز مشابه \D در groff مطابقت دارد؛ به groff(7) مراجعه کنید.

دستورات ناشناخته D وابسته به دستگاه در نظر گرفته می‌شوند. آرگومان‌های آن به عنوان رشته تجزیه می‌شوند؛ سپس کل اطلاعات به پس‌پردازنده فرستاده می‌شود.

در مرجع دستورات زیر، عنصر نحوی ⟨line-break⟩ به معنای یک شکست خط نحوی است همانطور که در زیربخش «جداسازی» در بالا تعریف شد.

رسم بی-اسپلاین (B-spline) از موقعیت فعلی تا انحراف (h1, v1)، سپس تا انحراف (h2, v2) در صورت ارائه، و غیره، تا (hn, vn). این دستور تعداد متغیری از جفت‌آرگومان‌ها را می‌پذیرد؛ موقعیت فعلی به نقطه پایانی منحنی رسم‌شده منتقل می‌شود.
رسم کمان از موقعیت فعلی به (h1, v1)+(h2, v2) با مرکز در (h1, v1)؛ سپس انتقال موقعیت فعلی به نقطه پایانی کمان.
رسم یک دایره توپر با استفاده از رنگ پر کردن فعلی با قطر d (عدد صحیح در واحدهای پایه u) که سمت چپ‌ترین نقطه آن در موقعیت فعلی قرار دارد؛ سپس انتقال موقعیت فعلی به راست‌ترین نقطه دایره. یک آرگومان عدد صحیح دوم اختیاری نادیده گرفته می‌شود (این به فرمت‌کننده اجازه می‌دهد تعداد زوجی از آرگومان‌ها تولید کند). این دستور یک الحاقیه گنو است.
رسم خط دایره با قطر d (عدد صحیح در واحدهای پایه u) که سمت چپ‌ترین نقطه آن در موقعیت فعلی قرار دارد؛ سپس انتقال موقعیت فعلی به راست‌ترین نقطه دایره.
رسم یک بیضی توپر در رنگ پر کردن فعلی با قطر افقی h و قطر عمودی v (هر دو عدد صحیح در واحدهای پایه u) که سمت چپ‌ترین نقطه آن در موقعیت فعلی قرار دارد؛ سپس انتقال به راست‌ترین نقطه بیضی. این دستور یک الحاقیه گنو است.
رسم یک بیضی توخالی با قطر افقی h و قطر عمودی v (هر دو عدد صحیح در واحدهای پایه u) که سمت چپ‌ترین نقطه آن در موقعیت فعلی قرار دارد؛ سپس انتقال به راست‌ترین نقطه بیضی.
تنظیم رنگ پر کردن برای اشیای طراحی توپر با استفاده از طرح‌های رنگ مختلف؛ دستور مشابه برای تنظیم رنگ متن، گرافیک خطی و خط دور اشیای گرافیکی m است. مولفه‌های رنگ به عنوان آرگومان‌های عدد صحیح بین 0 و 65536 مشخص می‌شوند. تعداد مولفه‌های رنگ و معنی آنها برای طرح‌های مختلف رنگ متغیر است. این دستورات توسط توالی‌های گریز GNU troff تولید می‌شوند: “\D'F ...'” \M (بدون دستورات گرافیکی متناظر دیگر). هیچ تغییر موقعیتی رخ نمی‌دهد. این دستور یک الحاقیه گنو است.
تنظیم رنگ پر کردن برای اشیای طراحی توپر با استفاده از طرح رنگ CMY، شامل 3 مولفه رنگ فیروزه‌ای، سرخابی و زرد.
تنظیم رنگ پر کردن برای اشیای طراحی توپر به مقدار پیش‌فرض رنگ پر کردن (در اکثر موارد سیاه). بدون آرگومان‌های مولفه.
تنظیم رنگ پر کردن برای اشیای طراحی توپر به سایه خاکستری ارائه‌شده توسط آرگومان، یک عدد صحیح بین 0 (سیاه) و 65536 (سفید).
تنظیم رنگ پر کردن برای اشیای طراحی توپر با استفاده از طرح رنگ CMYK، شامل 4 مولفه رنگ فیروزه‌ای، سرخابی، زرد و سیاه.
تنظیم رنگ پر کردن برای اشیای طراحی توپر با استفاده از طرح رنگ RGB، شامل 3 مولفه رنگ قرمز، سبز و آبی.
آرگومان n باید یک عدد صحیح در محدوده -32767 تا 32767 باشد.
0≤n≤1000
تنظیم رنگ پر کردن برای اشیای طراحی توپر به سایه‌ای از خاکستری، که در آن 0 معادل سفید خالص، 1000 (پیش‌فرض) معادل سیاه خالص، و مقادیر مابین معادل سایه‌های میانی خاکستری است؛ این دستور با “DFg” جایگزین شده است.
تنظیم رنگ پر کردن به رنگی که در حال حاضر برای متن و خط دور استفاده می‌شود، دستور m را ببینید. به عنوان مثال، توالی دستورات
mg 0 0 65536
Df -1
تمام رنگ‌ها را به آبی تنظیم می‌کند.

این دستور یک الحاقیه گنو است.

رسم خط از موقعیت فعلی تا انحراف (h, v) (اعداد صحیح در واحدهای پایه u)؛ سپس تنظیم موقعیت فعلی به انتهای خط رسم‌شده.
رسم یک چندضلعی توخالی از موقعیت فعلی تا انحراف (h1, v1)، از آنجا تا انحراف (h2, v2)، و غیره، تا انحراف (hn, vn)، و از آنجا برگشت به موقعیت شروع. به دلایل تاریخی، موقعیت با افزودن مجموع تمام آرگومان‌ها با نمایه فرد به موقعیت افقی فعلی و آرگومان‌های با نمایه زوج به موقعیت عمودی تغییر می‌یابد. اگرچه این منطقی نیست اما برای سازگاری حفظ شده است. این دستور یکی از الحاقات groff است.
همان ماکرو مشابه دستور متناظر Dp با همان آرگومان‌ها است، اما به جای یک چندضلعی توخالی، یک چندضلعی توپر را با رنگ پر کردن فعلی رسم می‌کند. موقعیت به همان روش Dp تغییر می‌کند. این دستور یک الحاقیه گنو است.
تنظیم ضخامت خط فعلی به  n (یک عدد صحیح در واحدهای پایه  u) اگر n>0؛ اگر n=0 کوچک‌ترین ضخامت خط موجود را انتخاب می‌کند؛ در غیر این صورت، ضخامت خط متناسب با اندازه حروف قرار داده می‌شود که حالت پیش‌فرض است. به دلایل تاریخی، موقعیت افقی با افزودن آرگومان به موقعیت افقی فعلی تغییر می‌یابد، در حالی که موقعیت عمودی تغییر نمی‌کند. اگرچه این منطقی نیست، برای سازگاری حفظ شده است. این دستور یک الحاقیه گنو است.

هر دستور کنترل دستگاه با حرف “x” شروع می‌شود، که به دنبال آن یک کاراکتر فاصله (فاصله یا تب اختیاری یا دلخواه در GNU troff) و یک حرف یا کلمه زیردستور قرار دارد؛ هر آرگومان (در صورت وجود) باید با یک فاصله نحوی مقدم شود. تمام دستورات “x” با یک شکست خط نحوی خاتمه می‌یابند؛ هیچ دستور کنترل دستگاهی نمی‌تواند در همان خط با دستور دیگری دنبال شود (به جز یک کامنت).

زیردستور اساساً یک حرف تکی است، اما برای افزایش خوانایی می‌تواند به صورت یک کلمه نوشته شود، یعنی دنباله‌ای دلخواه از کاراکترها که با کاراکتر تب، فاصله یا خط جدید بعدی پایان می‌یابد. تمام کاراکترهای کلمه زیردستور به جز کاراکتر اول به سادگی نادیده گرفته می‌شوند. به عنوان مثال، GNU troff دستور مقداردهی اولیه “x i” را به صورت “x init” و دستور وضوح تصویر را از “x r” به صورت “x res” خروجی می‌دهد.

در ادامه، عنصر نحوی ⟨line-break⟩ به معنای یک شکست خط نحوی است همانطور که در زیربخش «جداسازی» در بالا تعریف شد.

(Filename control command)
استفاده از name به عنوان نام مورد نظر برای فایل فعلی در گزارش‌های خطا. این برای به یاد آوردن نام فایل اصلی هنگامی که groff از مکانیزم پایپینگ داخلی خود استفاده می‌کند مفید است. فایل ورودی با این دستور تغییر نمی‌کند. این دستور یک الحاقیه گنو است.
(font control command)
سوار کردن موقعیت قلم n (یک عدد صحیح غیرمنفی) با قلمی به نام s (یک کلمه متنی)؛ به groff_font(5) مراجعه کنید.
(Height control command)
تنظیم ارتفاع کاراکتر به n (یک عدد صحیح مثبت در نقاط مقیاس‌شده z). troff کلاسیک در عوض از واحد نقاط (p) استفاده می‌کرد؛ بخش «سازگاری» در ادامه را ببینید.
(init control command)
مقداردهی اولیه دستگاه. این سومین دستور سرآیند است.
(pause control command)
تجزیه می‌شود اما نادیده گرفته می‌شود. مستندات کلاسیک چنین می‌گوید: دستگاه مکث می‌کند، می‌تواند مجدداً راه‌اندازی شود.
(resolution control command)
وضوح برابر است با n، در حالی که h حداقل حرکت افقی، و v حداقل حرکت عمودی ممکن با این دستگاه است؛ تمام آرگومان‌ها اعداد صحیح مثبت در واحدهای پایه u در هر اینچ هستند. این دومین دستور سرآیند است.
(Slant control command)
تنظیم زاویه شیب به n درجه (یک عدد صحیح در واحدهای پایه u).
(stop control command)
خاتمه دادن به پردازش فایل فعلی؛ به عنوان آخرین دستور خروجی مستقل از دستگاه troff صادر می‌شود.
(trailer control command)
تولید اطلاعات تریلر، در صورت وجود. در groff، این در حال حاضر نادیده گرفته می‌شود.
(Typesetter control command)
تنظیم نام درایور خروجی به xxx، دنباله‌ای از کاراکترهای غیرفاصله که با یک فاصله خاتمه می‌یابد. نام‌های ممکن با نام‌های گزینه -T در groff مطابقت دارند. این اولین دستور سرآیند است.
(underline control command)
پیکربندی خط‌کشی زیر فاصله‌ها. اگر n برابر با 1 باشد، خط‌کشی زیر فاصله‌ها را آغاز می‌کند؛ اگر n برابر با 0 باشد، خط‌کشی زیر فاصله‌ها را متوقف می‌سازد. این برای درخواست cu در حالت nroff لازم است و در غیر این صورت نادیده گرفته می‌شود. این دستور یک الحاقیه گنو است.
(X-escape control command)
ارسال رشته anything بدون تفسیر به دستگاه. اگر خط پس از این دستور با یک کاراکتر + شروع شود، این خط به عنوان یک خط ادامه به معنای زیر تفسیر می‌شود: علامت + نادیده گرفته می‌شود، اما به جای آن یک کاراکتر خط جدید به دستگاه فرستاده می‌شود و بقیه خط بدون تفسیر ارسال می‌گردد. همین امر برای تمام خطوط بعدی اعمال می‌شود تا زمانی که اولین کاراکتر یک خط کاراکتر + نباشد. این دستور توسط توالی گریز groff به صورت \X تولید می‌شود. ادامه خط یک الحاقیه گنو است.

نسخه AT&T troff اصولاً گلیف‌ها را با نوشتن دو رقم (یک حرکت) به دنبال یک کاراکتر تکی مربوط به یک گلیف منتشر می‌کرد. این نحو کمتر یک دستور مستقل است و بیشتر یک کدگذاری فشرده از دستورات c و h می‌باشد.

حرکت به راست به اندازه dd (دقیقاً دو رقم اعشاری) واحد پایه u، سپس چاپ گلیف با نام تک‌حرفی c.

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

برای دستگاه‌های مدرن با وضوح بالا، این دستور غیرعملی است زیرا عرض گلیف‌ها در واحدهای پایه مقداری بزرگ‌تر از آن چیزی است که دو رقم اعشاری بتوانند نشان دهند. در groff، این دستور فقط برای خروجی به دستگاه‌های X75، X75-12، X100 و X100-12 استفاده می‌شود. برای سایر دستگاه‌ها، دستورات t و u قابلیت‌های بیشتر و امکانات عیب‌یابی برتری فراهم می‌کنند.

زبان توصیف صفحه AT&T troff اولین بار در “A Typesetter-independent TROFF” توسط برایان کرنیهان مستند شد، و تا سال ۱۹۹۲ راهنمای AT&T troff برای گنجاندن شرحی از آن به‌روزرسانی شد.

زبان توصیف صفحه groff با این مشخصات سازگار است مگر در جنبه‌های زیر:

•
شبه‌استقلال از دستگاه در AT&T troff مستقل از دستگاه هنوز پیاده‌سازی نشده است.
•
سخت‌افزار چاپ اوایل دهه ۱۹۸۰ با سخت‌افزار امروزی متفاوت بود. نام‌های دستگاه‌های خروجی groff نیز با نام‌های AT&T troff تفاوت دارد. به عنوان مثال، دستگاه پست‌اسکریپت در AT&T troff، post (پیاده‌سازی‌شده توسط دستور درایور dpost)، تنها دارای وضوح 720 واحد در اینچ بود که برای چاپگرهای دهه‌های گذشته مناسب بود. دستگاه ps در groff دارای وضوح 72000 واحد در اینچ است. از نظر تئوری، با پیاده‌سازی یک سازوکار تغییر مقیاس، groff می‌تواند از دستگاه post در AT&T شبیه‌سازی به عمل آورد.
•
اگرچه دستور بی-اسپلاین D~ توسط تجزیه‌کننده زبان توصیف صفحه groff به طور قابل اعتمادی تفسیر می‌شود، برخی از درایورهای خروجی روتین‌های رسم را برای آن پیاده‌سازی نکرده‌اند.
•
در GNU troff، آرگومان مربوط به دستورات s و x H از یک واحد ضمنی از نقاط مقیاس‌شده z استفاده می‌کند در حالی که AT&T troff از نقاط فاصله‌گذاری p استفاده می‌کند. این یک ناسازگاری نیست، بلکه یک الحاقیه سازگار است، زیرا هر دو واحد برای هر دستگاهی که دستورالعمل sizescale در فایل DESC آن وجود ندارد یکسان هستند، از جمله تمامی پس‌پردازنده‌های AT&T و دستگاه‌های متنی groff (در حالت  nroff). دستگاه‌های groff که از sizescale استفاده می‌کنند یا برای AT&T troff وجود ندارند، یا نام متفاوتی دارند، یا به نظر می‌رسد که وضوح متفاوتی دارند. بنابراین تعارضات بسیار بعید است.
•
موقعیت رسم پس از پردازش دستورات “Dp”، “DP” و “Dt” غیرمنطقی است. از آنجا که نسخه‌های قدیمی GNU troff این ایراد را داشتند، ما آن را برای سازگاری حفظ کرده‌ایم، اما ممکن است در آینده آن را تغییر دهیم. این دستورات طراحی را با توالی گریز \Z محصور کنید تا هم بر موقعیت‌یابی غیرمنطقی غلبه کنید و هم ورودی خود را صرف‌نظر از وجود این ایراد در پیاده‌سازی، پایدار نگه دارید.

تفاوت‌های بین groff و troff کلاسیک در groff_diff(7) مستند شده است.

/usr/share/groff/1.24.1/font/devname/DESC
دستگاه خروجی name را توصیف می‌کند.

جیمز کلارک نسخه اولیه‌ای از این سند را نوشت، که تنها تفاوت‌های بین زبان توصیف صفحه مستقل از دستگاه AT&T troff و GNU troff را تشریح می‌کرد. از آن زمان توسط برند وارکن (Bernd Warken) و جی. برندین رابینسون (G. Branden Robinson) گسترش یافته و بازبینی شده است.

کتاب Groff: The GNU Implementation of troff، نوشته ترنت ای. فیشر و ورنر لمبرگ، راهنمای اصلی groff است. می‌توانید آن را به صورت تعاملی با دستور «info groff» مرور کنید.

«راهنمای کاربر Troff» نوشته جوزف اف. اوسانا، ۱۹۷۶ (بازبینی‌شده توسط برایان دبلیو. کرنیهان، ۱۹۹۲)، گزارش فنی علوم کامپیوتر آزمایشگاه‌های بل AT&T شماره ۵۴ که به طور گسترده «CSTR #54» نامیده می‌شود، زبان، فرمت‌های فایل توصیف دستگاه و قلم، و زبان توصیف صفحه مستقل از دستگاه را که در مستندات groff مجموعاً با عنوان «AT&T troff» نامیده می‌شوند مستند می‌کند.

«یک TROFF مستقل از حروف‌چین» نوشته برایان دبلیو. کرنیهان، ۱۹۸۲، گزارش فنی علوم کامپیوتر آزمایشگاه‌های بل AT&T شماره ۹۷ (CSTR #97)، بینش‌های بیشتری را در مورد فرمت‌های فایل توصیف دستگاه و قلم و زبان توصیف صفحه مستقل از دستگاه ارائه می‌دهد.

groff(1)
گزینه -Z را مستند می‌کند و حاوی ارجاعاتی به مستندات بیشتر groff است.
groff(7)
زبان groff از جمله توالی‌های گریز و سامانه واحدهای آن را شرح می‌دهد.
groff_font(5)
پارامترهای مقیاس‌بندی فایل‌های DESC (توصیف دستگاه) را با جزئیات بیان می‌کند.
troff(1)
زبانی را که در اینجا مستند شده است تولید می‌کند.
roff(7)
جنبه‌های تاریخی و ساختار کلی سامانه‌های roff را ارائه می‌دهد.
groff_diff(7)
تفاوت‌های بین خروجی AT&T troff و GNU troff را برمی‌شمارد.
gxditview(1)
یک نمایشگر برای خروجی مستقل از دستگاه troff است.
Roff.js یک نمایشگر برای خروجی مستقل از دستگاه troff است که با جاوااسکریپت نوشته شده است.

grodvi(1)، grohtml(1)، grolbp(1), grolj4(1), gropdf(1), grops(1) و grotty(1) پس‌پردازنده‌های groff هستند.

2026-03-15 groff 1.24.1