| PIC(1) | دستورهای کاربری | PIC(1) |
نام (NAME)
pic - پیشپردازنده رسم نمودار و اشکال گرافیکی برای roff و TeX
خلاصه دستور (SYNOPSIS)
pic [ گزینهها... ] [ فایل... ]
توضیحات (DESCRIPTION)
دستور pic پیشپردازندهای است که توصیفهای متنی ساده اشکال و نمودارها را درون اسناد حروفچینی troff به کدهای گرافیکی تبدیل میکند.
پیادهسازی گنو از pic بخشی از سامانه قالببندی اسناد groff(1) است. pic یک پیشپردازنده troff(1) است که توصیفهای نموداری و اشکال گرافیکی تعبیهشده در فایلهای ورودی roff(7) یا TeX را به زبانی که توسط TeX یا troff قابل فهم باشد ترجمه میکند. این دستور محتوای هر فایل را به جریان خروجی استاندارد رونویسی (کپی) میکند، به جز خطوط بین .PS و هر یک از ماکروهای .PE، .PF یا .PY که به عنوان توصیف تصویر در زبان pic تفسیر میشوند.
پایان دادن به یک تصویر pic با ماکروی .PE موقعیت رسم را در پایین تصویر قرار میدهد، و با .PF یا .PY آن را در بالای تصویر باقی میگذارد. به طور معمول، دستور pic مستقیماً توسط کاربر اجرا نمیشود، بلکه با مشخص کردن گزینه -p در دستور groff(1) فراخوانی میگردد. اگر هیچ عملوند فایلی در خط فرمان داده نشود، یا اگر نام فایل «-» باشد، ورودی استاندارد خوانده میشود.
ارائه تعاریف مناسب برای ماکروهای PS، PE و حداقل یکی از ماکروهای PF یا PY بر عهده کاربر است. هنگامی که یک بسته ماکرو این تعاریف را عرضه نمیکند، میتوانید با گزینه -mpic در groff تعاریف سادهای را دریافت کنید؛ این تعاریف هر تصویر را در مرکز صفحه قرار میدهند.
نسخه گنوی pic از PY به عنوان هممعنی PF پشتیبانی میکند تا از تداخل نام با بسته ماکروی mm (که PF را به عنوان ماکروی مدیریت پاورقی صفحه تعریف میکند) جلوگیری شود. همواره ترجیحاً از PF استفاده کنید، مگر اینکه در سند خود با مشکل مشابهی روبرو شوید.
گزینهها (OPTIONS)
گزینه --help پیام راهنمای استفاده را نمایش میدهد، در حالی که -v و --version اطلاعات نسخه را نشان میدهند؛ تمامی آنها پس از اجرا برنامه را خاتمه میدهند.
- -c
- سازگاری بیشتر با tpic؛ این گزینه مستلزم فعال شدن -t است. خطوطی که با \ شروع میشوند، به طور شفاف (دستنخورده) عبور داده نمیشوند. خطوطی که با . شروع میشوند، با تغییر نقطه آغازین به \ عبور داده میشوند. با خطی که با .ps شروع میشود رفتار ویژهای صورت میگیرد: یک آرگومان اختیاری عدد صحیح میپذیرد که ضخامت خط (اندازه قلم) را بر حسب میلیاینچ مشخص میکند؛ در صورت عدم ذکر آرگومان، ضخامت خط قبلی بازگردانده میشود؛ ضخامت پیشفرض خط ۸ میلیاینچ است. ضخامت خطی که بدین صورت مشخص میشود، تنها زمانی اعمال میشود که ضخامت خط نامنفی با استفاده از صفت thickness یا با مقداردهی متغیر linethick تعیین نشده باشد.
- -C
- ماکروهای .PS، .PE، .PF و .PY را حتی در صورتی که نویسهای غیر از فاصله یا خط جدید به دنبال آنها آمده باشد، تشخیص میدهد.
- -n
- از افزونههای groff برای دستورهای رسم troff استفاده نمیکند. اگر پسپردازندهای که استفاده میکنید از این افزونهها (که در groff_out(5) توصیف شدهاند) پشتیبانی نمیکند، این گزینه را مشخص کنید. این گزینه همچنین باعث میشود pic برای رسم نقاط در حالت troff از خطوط با طول صفر استفاده نکند.
- -S
- اجرا در حالت امنتر (safer mode)؛ دستورهای sh نادیده گرفته میشوند. این حالت که به طور پیشفرض فعال است، هنگام کار با ورودیهای غیرقابلاعتماد سودمند است.
- -t
- خروجی سازگار با TeX تولید میکند.
- -U
- اجرا در حالت ناامن (unsafe mode)؛ دستورهای sh تفسیر و اجرا میشوند.
- -z
- در حالت TeX، نقطهها را با استفاده از خطوط با طول صفر رسم میکند.
گزینههای زیر که توسط نسخههای دیگر pic پشتیبانی میشوند، در نسخه گنو نادیده گرفته میشوند:
کاربرد (USAGE)
این بخش عمدتاً به تفاوتهای میان pic گنو و نسخه نگارش هشتم یونیکس تحقیقاتی AT&T (1985) میپردازد. بسیاری از این تفاوتها در مورد نسخههای بعدی pic شرکت AT&T نیز صدق میکنند.
حالت TeX (TeX mode)
خروجی سازگار با TeX زمانی تولید میشود که گزینه -t مشخص شده باشد. باید از یک درایور TeX استفاده کنید که از دستورات ویژه (specials) نسخه ۲ tpic پشتیبانی کند. (tpic یک انشعاب از pic شرکت AT&T بود که توسط تیم مورگان در دانشگاه کالیفرنیا، ارواین حدود سال ۱۹۸۴ توسعه یافت. این ابزار امروزه بیشتر به دلیل نامگذاری گروهی از دستورات \special که برای TeX تولید میکرد شناخته میشود.)
خطوطی که با \ شروع میشوند، بدون تغییر منتقل میشوند؛ یک نویسه % به انتهای خط اضافه میشود تا از ایجاد فاصلههای ناخواسته جلوگیری شود. میتوانید با اطمینان از این ویژگی برای تغییر فونتها یا مقدار \baselineskip استفاده کنید. هر چیز دیگری ممکن است نتایج نامطلوبی ایجاد کند؛ مسئولیت استفاده بر عهده شماست. به طور پیشفرض، با خطوطی که با نقطه شروع میشوند رفتار خاصی صورت نمیگیرد — اما به گزینه -c مراجعه کنید.
در حالت TeX، دستور pic برای هر تصویر یک جعبه عمودی (vbox) به نام \graph تعریف میکند. از دستور figname در pic گنو برای تغییر نام vbox استفاده کنید. باید خودتان آن vbox را چاپ کنید، برای مثال با استفاده از دستور:
\centerline{\box\graph}
\centerline{\raise 1em\box\graph}
\def\gpicbox#1{%
\vbox{\unvbox\csname #1\endcsname\kern 0pt}}
دستورها (COMMANDS)
چندین دستور جدید در pic گنو جداکنندهها را میپذیرند که در خلاصه آنها با آکولاد { } نشان داده شده است. تودرتویی آکولادها پشتیبانی میشود. هر نویسه دیگری (به جز فاصله، تب یا خط جدید) نیز میتواند به عنوان جداکننده جایگزین استفاده شود، که در این صورت اعضای هر جفت باید یکسان باشند. رشتهها درون هر دو نوع جداکننده تشخیص داده میشوند؛ آنها میتوانند شامل نویسه جداکننده یا آکولادهای نامتوازن باشند.
- for variable = expr1 to expr2 [by [*]expr3] do X body X
- متغیر variable را برابر با expr1 قرار میدهد. تا زمانی که مقدار variable کمتر یا مساوی expr2 باشد، بدنه body را اجرا کرده و متغیر variable را به اندازه expr3 افزایش میدهد؛ اگر by داده نشده باشد، متغیر را ۱ واحد افزایش میدهد. اگر قبل از expr3 علامت * آمده باشد، آنگاه متغیر در expr3 ضرب خواهد شد. مقدار expr3 میتواند برای حالت افزایشی، عددی منفی باشد؛ در این حالت بررسی میشود که آیا متغیر بزرگتر یا مساوی expr2 است یا خیر. برای حالت ضربی، expr3 باید بزرگتر از صفر باشد. اگر شروط برآورده نشوند، حلقه اجرا نمیشود. X میتواند هر نویسهای باشد که درون body رخ نداده باشد.
- if expr then X if-true X [else Y if-false Y]
- عبارت expr را ارزیابی میکند؛ اگر مقدار آن غیرصفر باشد، بخش if-true و در غیر این صورت بخش if-false را اجرا میکند. X میتواند هر نویسهای باشد که درون if-true نیامده باشد. Y میتواند هر نویسهای باشد که درون if-false نیامده باشد.
- print arg ...
- آرگومانها را به هم پیوند داده و در جریان خطای استاندارد (stderr) همراه با یک خط جدید مینویسد. هر arg باید یک عبارت، یک موقعیت مکانی (position) یا یک متن باشد. این دستور برای اشکالزدایی بسیار سودمند است.
- command arg ...
.PS x = 14 command ".ds string x is " x "." .PE \*[string]
x is 14.
- sh X command X
- دستور command را به یک پوسته (shell) برای اجرا ارسال میکند.
- copy "filename"
- فایل filename را در این نقطه از سند درج و شامل میکند.
- copy ["filename"] thru X body X [until "word"]
- copy ["filename"] thru macro [until "word"]
.PS copy thru % circle at ($1,$2) % until "END" 1 2 3 4 5 6 END box .PE
.PS circle at (1,2) circle at (3,4) circle at (5,6) box .PE
- reset
- reset pvar1[,] pvar2 ...
- متغیرهای از پیشتعریفشده pvar1، pvar2 و... را به مقادیر پیشفرضشان بازنشانی میکند؛ در صورتی که هیچ آرگومانی داده نشود، تمامی متغیرهای از پیشتعریفشده به مقادیر پیشفرض بازگردانده میشوند. نام متغیرها میتوانند با کاما، فاصله یا هر دو از یکدیگر جدا شوند. مقداردهی به متغیر scale نیز باعث میشود تمام متغیرهای از پیشتعریفشده که ابعاد را کنترل میکنند، به مقادیر پیشفرضشان ضربدر مقدار جدید scale بازنشانی شوند.
- plot expr ["text"]
- یک شیء متنی است که با استفاده از text به عنوان رشته قالببندی برای sprintf با آرگومان expr ساخته میشود. اگر text حذف شود، رشته قالببندی %g استفاده میشود. صفات را میتوان همانند یک شیء متنی معمولی مشخص کرد. دقت زیادی به خرج دهید که رشته قالببندی مناسبی مشخص کنید؛ pic تنها بررسیهای بسیار محدودی روی رشته انجام میدهد. این ساختار منسوخ شده و استفاده از sprintf به جای آن توصیه میشود.
- var := expr
.PS x = 3 y = 3 [ x := 5 y = 5 ] print x " " y .PE
5 3
عبارتها (EXPRESSIONS)
نحو عبارات به طور چشمگیری گسترش یافته است:
x ^ y توان (exponentiation) sin(x) سینوس cos(x) کسینوس atan2(y, x) قوس تانژانت دو آرگومانی log(x) لگاریتم در مبنای ۱۰ exp(x) توان بر مبنای ۱۰ (یعنی 10^x) sqrt(x) ریشه دوم (جذر) int(x) جزء صحیح rand() تولید عدد تصادفی بین ۰ و ۱ rand(x) تولید عدد تصادفی بین ۱ و x (منسوخ شده) srand(x) تنظیم بذر اولیه عدد تصادفی max(e1, e2) بزرگترین مقدار بین دو عبارت min(e1, e2) کوچکترین مقدار بین دو عبارت !e نقیض منطقی (NOT) e1 && e2 عطف منطقی (AND) e1 || e2 فصل منطقی (OR) e1 == e2 برابری e1 != e2 نابرابری e1 >= e2 بزرگتر یا مساوی e1 > e2 بزرگتر e1 <= e2 کوچکتر یا مساوی e1 < e2 کوچکتر "str1" == "str2" برابری رشتهها "str1" != "str2" نابرابری رشتهها
عبارات مقایسه رشتهها باید در برخی زمینهها درون پرانتز قرار گیرند تا از ابهام جلوگیری شود.
سایر تغییرات (OTHER CHANGES)
یک عبارت ساده، expr، به عنوان صفت پذیرفته میشود؛ این معادل با dir expr است که در آن dir جهت فعلی رسم است. برای مثال:
line 2i
بیشینه عرض و ارتفاع تصویر از متغیرهای maxpswid و maxpsht گرفته میشود. در ابتدا این متغیرها دارای مقادیر ۸٫۵ و ۱۱ هستند.
نماد علمی برای اعداد مجاز است. به عنوان مثال:
x = 5e-2
صفات متن را میتوان با هم ترکیب کرد. برای مثال:
"foo" above ljust
هیچ محدودیتی برای عمق بررسی بلوکها وجود ندارد. برای مثال:
[A: [B: [C: box ]]] with .A.B.C.sw at 1,2 circle at last [].A.B.C
کمانها (arcs) اکنون دارای نقاط قطبنما هستند که توسط دایرهای که کمان بخشی از آن است تعیین میشود.
دایرهها، بیضیها و کمانها میتوانند نقطهچین (dotted) یا خطچین (dashed) باشند. در حالت TeX، منحنیهای اسپلاین (splines) نیز میتوانند نقطهچین یا خطچین باشند.
جعبهها (boxes) میتوانند دارای گوشههای گرد باشند. صفت rad شعاع ربعدایرهها را در هر گوشه مشخص میکند. اگر هیچ صفت rad یا diam داده نشود، از شعاع boxrad استفاده میشود. در ابتدا boxrad دارای مقدار ۰ است. یک جعبه با گوشههای گرد میتواند نقطهچین یا خطچین باشد.
جعبهها میتوانند اضلاع مورب داشته باشند. این کار در عمل شکل یک جعبه را از مستطیل به یک متوازیالأضلاع دلخواه تغییر میدهد. صفات xslanted و yslanted فاصله افقی (x) و عمودی (y) گوشه بالا-راست جعبه را نسبت به موقعیت پیشفرض آن مشخص میکنند.
خط .PS میتواند یک آرگومان دوم برای تعیین بیشینه ارتفاع تصویر داشته باشد. اگر عرض برابر با صفر مشخص شود، در محاسبه ضریب مقیاس تصویر از عرض صرفنظر میشود. pic گنو همیشه یک تصویر را به یک میزان در هر دو جهت عمودی و افقی مقیاسبندی میکند. این با DWB 2.0 pic متفاوت است که ممکن است در صورت تعیین ارتفاع، تصویر را در جهت عمودی با مقداری متفاوت از جهت افقی مقیاسبندی کند.
هر شیء متنی یک جعبه نامرئی مرتبط با خود دارد. نقاط قطبنمای یک شیء متنی توسط این جعبه تعیین میشوند. حرکت ضمنی مرتبط با شیء نیز توسط این جعبه تعیین میشود. ابعاد این جعبه از صفات عرض و ارتفاع گرفته میشود؛ اگر صفت عرض داده نشده باشد، عرض برابر با textwid در نظر گرفته میشود؛ اگر صفت ارتفاع داده نشده باشد، ارتفاع برابر با تعداد رشتههای متنی مرتبط با شیء ضربدر textht خواهد بود. در ابتدا textwid و textht مقدار ۰ دارند.
تقریباً در تمامی جاهایی که میتوان از یک رشته متنی نقلقولشده استفاده کرد، میتوان از عبارتی به شکل زیر نیز استفاده کرد:
sprintf("format", arg, ...)
ضخامت خطوط مورد استفاده برای رسم اشیاء توسط متغیر linethick کنترل میشود. این مقدار ضخامت خطوط را بر حسب پوینت مشخص میکند. مقدار منفی به معنای استفاده از ضخامت پیشفرض است: در حالت خروجی TeX به معنای ضخامت ۸ میلیاینچ است؛ در حالت خروجی TeX با گزینه -c، به معنای ضخامت مشخصشده توسط خطوط .ps است؛ در حالت خروجی troff، به معنای ضخامتی متناسب با اندازه قلم (pointsize) است. مقدار صفر به معنای رسم باریکترین خط ممکن پشتیبانیشده توسط دستگاه خروجی است. در ابتدا مقدار آن ۱- است. همچنین صفت thick[ness] نیز وجود دارد. برای مثال:
circle thickness 1.5
جعبهها (شامل جعبههای با گوشههای گرد یا اضلاع مورب)، دایرهها و بیضیها را میتوان با دادن صفت fill[ed] توپر (رنگآمیزی) کرد. این صفت یک آرگومان اختیاری از عبارتی با مقداری بین ۰ و ۱ میپذیرد؛ مقدار ۰ آن را با رنگ سفید، مقدار ۱ با مشکی، و مقادیر میانی با سایهای متناسب از خاکستری پر میکنند. مقداری بزرگتر از ۱ نیز میتواند استفاده شود: این به معنای پر کردن با سایه خاکستری است که در حال حاضر برای متن و خطوط استفاده میشود. به طور معمول این رنگ مشکی است، اما دستگاههای خروجی ممکن است سازوکاری برای تغییر آن فراهم کنند. بدون آرگومان، از مقدار متغیر fillval استفاده میشود. در ابتدا این متغیر مقدار ۰٫۵ دارد. صفت invisible (نامرئی) بر پر کردن اشیاء تأثیری ندارد. هر متنی که با یک شیء توپر مرتبط باشد، پس از پر شدن شیء اضافه میشود تا متن توسط رنگ داخل شیء پوشانده نشود.
اصلاحکنندههای اضافی برای رسم اشیاء رنگی در دسترس هستند: outline[d] رنگ خطوط پیرامونی را تعیین میکند، shaded رنگ پر کردن داخل را مشخص میکند، و colour[ed] (یا color[ed] ) هر دو را تنظیم میکند. تمامی آنها انتظار یک آرگومان رشتهای در ادامه دارند که نام رنگ را مشخص میکند:
circle shaded "green" outline "black"
برای تغییر نام vbox در حالت TeX، متغیر شبهدستوری figname (که در واقع یک دستور ویژه تجزیهشده است) را درون یک تصویر مقداردهی کنید:
.PS figname = foobar; ... .PE
دستور pic فرض میکند که در ابتدای یک تصویر، رنگ نویسه (glyph) و رنگ پر کردن هر دو روی مقدار پیشفرض تنظیم شدهاند.
نوک پیکانها به صورت مثلثهای توپر رسم میشوند اگر متغیر arrowhead غیرصفر باشد و یا حالت TeX فعال باشد یا گزینه -n داده نشده باشد. در ابتدا arrowhead دارای مقدار ۱ است. نوک پیکانهای توپر همیشه با رنگ پیرامونی جاری پر میشوند.
خروجی troff دستور pic مستقل از دستگاه است. بنابراین گزینه -T افزونهای بیهوده و زائد است. تمامی اعداد بر حسب اینچ در نظر گرفته میشوند؛ اعداد هرگز بر حسب واحدهای ماشین troff تفسیر نمیشوند.
اشیاء میتوانند دارای صفت aligned باشند. این صفت تنها زمانی کار خواهد کرد که پسپردازنده grops(1) یا gropdf(1) باشد. هر متنی که با شیء دارای صفت aligned مرتبط باشد، حول مرکز شیء چرخانده میشود تا در جهت نقطه شروع به نقطه پایان شیء تراز گردد. این صفت بر روی اشیایی که نقاط شروع و پایان آنها بر هم منطبق است هیچ اثری نخواهد داشت.
در جاهایی که nth مجاز است، 'expr'th نیز مجاز است. عبارت ''th' یک نشانه (توکن) واحد است: هیچ فاصلهای بین آپاستروف و 'th' مجاز نیست. برای مثال:
for i = 1 to 4 do {
line from 'i'th box.nw to 'i+1'th box.se
}
تبدیل به سایر قالبها (CONVERSION)
برای به دست آوردن یک تصویر مستقل از یک فایل pic، کد pic خود را میان درخواستهای .PS و .PE محصور کنید؛ دستورات پیکربندی roff میتوانند در ابتدای فایل اضافه شوند، اما هیچ متن roff نباید اضافه شود.
لازم است این فایل بدون افزودن هیچگونه اطلاعات صفحه به groff داده شود، بنابراین باید بررسی کنید که چه ماکروهای .PS و .PE واقعاً فراخوانی میشوند. برای مثال، بسته ماکروی mm یک شماره صفحه اضافه میکند که بسیار آزاردهنده است. در حال حاضر، فراخوانی استاندارد groff بدون هیچ بسته ماکرویی به درستی کار میکند. همچنین میتوانید ماکروهای خود را تعریف کنید که مثلاً هیچ کاری انجام ندهند:
.de PS .. .de PE ..
خود groff تبدیل مستقیم به سایر قالبهای پرونده گرافیکی را ارائه نمیدهد. اما امکانات فراوانی وجود دارد اگر ابتدا تصویر خود را با استفاده از گزینه -Tps در groff به قالب پستاسکریپت (PostScript) تبدیل کنید. از آنجا که این فایل ps فاقد اطلاعات BoundingBox است، به خودی خود چندان کاربردی نیست، اما میتواند به سایر برنامههای تبدیل گرافیکی که معمولاً ps2other یا pstoother نامیده میشوند داده شود. علاوه بر این، مفسر پستاسکریپت گوستاسکریپت (gs(1)) دارای دستگاههای تبدیل گرافیکی داخلی است که با گزینه زیر فراخوانی میشوند:
gs -sDEVICE=<devname>
gs --help
یک راهکار جایگزین ممکن است استفاده از گزینه -Tpdf برای تبدیل مستقیم تصویر شما به قالب PDF باشد. کادر رسانه (MediaBox) فایل تولیدشده را میتوان با ارسال اندازه کاغذ با آرگومان -P-p به groff کنترل کرد.
از آنجا که قالب پرونده کپسولهشده پستاسکریپت (EPS) اهمیت روزافزونی یافته است و تبدیل آن در گذشته ساده تلقی نمیشد، شاید برایتان جالب باشد بدانید که ابزار تبدیلی به نام ps2eps وجود دارد که این کار را به درستی انجام میدهد. این ابزار بسیار بهتر از ابزار ps2epsi همراه با gs است.
برای قالبهای گرافیکی بیتی (bitmap)، باید از pstopnm استفاده کنید؛ فایل واسط pnm(5) حاصل را میتوان با استفاده از ابزارهای بسته netpbm به تقریباً هر قالب گرافیکی دلخواهی تبدیل کرد.
فایلها (FILES)
- /usr/share/groff/1.23.0/tmac/pic.tmac
- تعاریف سادهای از ماکروهای PS، PE، PF و PY را ارائه میدهد.
ایرادات (BUGS)
نویسههایی که به عنوان ورودی برای troff گنو نامعتبر هستند (برای مشاهده فهرست به راهنمای Texinfo دستور groff یا groff_char(7) مراجعه فرمایید) حتی در حالت TeX نیز رد میشوند.
تفسیر متغیر fillval با pic در نگارش دهم یونیکس تحقیقاتی ناسازگار است؛ در آن نسخه مقدار ۰ به عنوان سیاه و مقدار ۱ به عنوان سفید تفسیر میشد.
همچنین ببینید (SEE ALSO)
- /usr/share/doc/groff-base/pic.ps.gz
- «Making Pictures with GNU pic»، نوشته اریک ریموند (Eric S. Raymond). این فایل همراه با سورس آن، pic.ms، بخشی از توزیع groff است.
«PIC—A Graphics Language for Typesetting: User Manual»، نوشته برایان کرنیگان (Brian W. Kernighan)، سال ۱۹۸۴ (بازبینیشده در ۱۹۹۱)، گزارش فنی علوم رایانه آزمایشگاههای بل AT&T شماره ۱۱۶.
ابزار ps2eps از طریق آینههای CTAN در دسترس است، مانند: ftp://ftp.dante.de/tex-archive/support/ps2eps
ریچارد استیونز (W. Richard Stevens)، تبدیل PIC به HTML (Turning PIC into HTML)
ریچارد استیونز (W. Richard Stevens)، نمونههایی از ماکروهای pic (Examples of pic Macros)
troff(1)، groff(1)، groff_out(5)، groff_char(7)، roff(7)، tex(1)، gs(1)، ps2eps(1)، pstopnm(1)، ps2epsi(1)، pnm(5)، printf(3)
| مه ۲۰۲۵ | groff |