PS2EPS(1) PS2EPS(1)

ps2eps - تبدیل پرونده‌های PostScript به EPS (Encapsulated PostScript)

ps2eps [ -f ] [ -q ] [ -N ] [ -O ] [ -X ] [ -n ] [ -P ] [ -c ] [ -C ] [ -m ] [ -B ] [ -E ] [ -s pagedim ] [ -t offset ] [ -r resolution ] [ -R +|-|^ ] [ -l ] [ -g ] [ -H ] [ -d ] [ -h|--help ] [ -a ] [ -W ] [ -L ] [ -V|--version ] [ -- ] [ psfile1 ] [ psfile2 ] [ ... ]

این صفحه راهنما نسخه 1.70 از ps2eps را مستند می‌کند.

دستور ps2eps ابزاری است (نوشته‌شده به زبان Perl) برای تولید پرونده‌های PostScript کپسوله‌شده (EPS/EPSF) از اسناد معمول تک‌صفحه‌ای Postscript. این ابزار کادر محصورکننده (Bounding Box) صحیح را برای این پرونده‌های EPS محاسبه کرده و توالی‌های دستوری خاصی از postscript را که ممکن است نتایج نادرستی روی چاپگرها ایجاد کنند، فیلتر می‌کند. پرونده‌های EPS اغلب برای گنجاندن گرافیک‌های (مقیاس‌پذیر) با کیفیت بالا در اسناد TeX/LaTeX (یا حتی Word) مورد نیاز هستند. همچنین می‌توان از آن برای محاسبه BoundingBox صحیح برای پرونده‌های PDF با استفاده از گزینه --BBonly استفاده کرد. با این حال، این برنامه نمی‌تواند پرونده PDF تولید کند، اما می‌تواند در کنار pdfcrop به کار گرفته شود.

دستور ps2eps بدون هیچ آرگومانی، از ورودی استاندارد می‌خواند و در خروجی استاندارد می‌نویسد. اگر نام‌های پرونده به عنوان آرگومان داده شوند، یکی یکی پردازش می‌شوند و پرونده‌های خروجی با پسوند .eps نوشته می‌شوند. اگر پرونده‌های ورودی دارای پسوند .ps یا .prn باشند، این پسوند با .eps جایگزین می‌شود. در تمام موارد دیگر، .eps به انتهای نام پرونده ورودی اضافه می‌گردد. لطفاً توجه داشته باشید که پرونده‌های PostScript ورودی باید فقط حاوی یک صفحه منفرد باشند (می‌توانید برای استخراج یک صفحه از سندی که شامل چندین صفحه است، از دستور psselect از بسته psutils استفاده کنید).

اگر BoundingBox در خروجی اشتباه به نظر می‌رسد، لطفاً گزینه‌های --size یا --ignoreBB را امتحان کنید. همچنین بخش «عیب‌یابی (TROUBLESHOOTING)» را ببینید.

دستور ps2eps از نحو معمول خط فرمان GNU پیروی می‌کند که در آن گزینه‌های طولانی با دو خط تیره (`-') شروع می‌شوند. خلاصه‌ای از گزینه‌ها در زیر آمده است.

نمایش خلاصه‌ای از گزینه‌ها.
نمایش نسخه برنامه.
اجبار به بازنویسی پرونده‌های موجود. ps2eps به طور پیش‌فرض پرونده‌ها را بازنویسی نمی‌کند تا از حذف تصادفی پرونده‌های EPS اصلی جلوگیری شود.
عملکرد بی‌صدا (بدون خروجی هنگام پردازش پرونده‌ها، به جز خطاها).
عدم درج هیچ‌گونه کد postscript. به طور معمول چند دستورالعمل postscript توسط ps2eps در اطراف کد اصلی postscript اضافه می‌شود که می‌توان با این گزینه آن را غیرفعال کرد.
عدم فیلتر کردن کامنت سرآیند %%Orientation:.
صرفاً چاپ کادر(های) محصورکننده حاصل در خروجی خطای استاندارد (stderr)؛ هیچ پرونده خروجی نوشته نمی‌شود. ps2eps یک عملیات فقط‌خواندنی انجام خواهد داد. این قابلیت برای محاسبه کادرهای محصورکننده پرونده‌های PDF بسیار مفید است. می‌تواند با گزینه --quiet برای متوقف کردن سایر خروجی‌ها و همچنین با --nohires برای متوقف کردن خروجی HiResBoundingBox استفاده شود. می‌توان از آن در کنار pdfcrop به صورت زیر استفاده کرد: pdfcrop --gscmd 'gswrap-ps2eps.sh' file.pdf که در آن gswrap-ps2eps.sh حاوی چیزی شبیه به این است: ps2eps -l -X -q $BASH_ARGV
عدم تلاش برای اصلاح کد postscript با فیلتر کردن برخی دستورالعمل‌ها.
حذف تصویر پیش‌نمایش (پرونده کوچک‌تر، اما دیگر بدون پیش‌نمایش).
اصلاح بدون قید و شرط کد postscript. در غیر این صورت، فیلتر کردن معمولاً فقط با تشخیص درایورهای خاصی فعال می‌شود.
حفظ کامنت‌های ساختار سند.
درج کد postscript برای برش (clipping). مگر اینکه --nohires مشخص شده باشد، از HiResBoundingBox (بزرگ‌شده به میزان 0.1 نقطه) برای برش استفاده می‌شود.
استفاده از بیت‌مپ سیاه‌وسفید به عنوان پایه محاسبات (پیش‌فرض: خاموش).
که در آن pagedim یک اندازه استاندارد از پیش تعریف‌شده برای صفحه است (مانند a4,a0,b0,letter,...) یا به صراحت در قالب pagedim:=XxY[cm|in] مشخص می‌شود، که X و Y اعدادی هستند (اعداد ممیز شناور پذیرفته می‌شوند) و پس از آن‌ها واحدهای سانتی‌متر (cm) یا اینچ (in) می‌آیند (پیش‌فرض: cm). از --size=list برای فهرست کردن اندازه‌های از پیش تعریف‌شده صفحه استفاده کنید. همچنین متغیر محیطی PS2EPS_SIZE را ببینید.
مشخص کردن آفست x,y (می‌تواند منفی باشد) بر حسب نقاط postscript (معادل 1/72 dpi) برای رسم. اگر رسم شما دارای مختصات منفی باشد ممکن است این گزینه لازم باشد؛ چرا که مختصات منفی معمولاً باعث می‌شود ghostscript بخش منفی تصویر شما را برش دهد، زیرا رندر کردن را از مختصات مثبت شروع می‌کند. خروجی حاصل نیز جابه‌جا (shift) خواهد شد.
مشخص کردن تفکیک‌پذیری (رزولوشن) بر حسب dpi (نقطه در اینچ) برای رسم تحت ghostscript. تفکیک‌پذیری پیش‌فرض 144 dpi است که دو برابر مقدار معمول 72 dpi می‌باشد. اگر یک رزولوشن وابسته به سخت‌افزار در postscript کدگذاری شده باشد (مانند 600dpi)، این گزینه ممکن است کمک کند. مثال: ps2eps -l -r 600 test.ps
این گزینه خروجی EPS حاصل را می‌چرخاند. پارامتر direction جهت چرخش را تعیین می‌کند: + به معنی 90+ درجه (در جهت عقربه‌های ساعت)، - به معنی 90- درجه (پادساعت‌گرد)، و ^ به معنی 180 درجه (وارونه) است.
گسترش کادر محصورکننده محکم اصلی به میزان یک نقطه در هر جهت.
عدم استفاده از کادر محصورکننده موجود به عنوان اندازه صفحه برای رندر.
عدم استفاده از %%EOF به عنوان نشانه پایان پرونده. در غیر این صورت، ps2eps فرض می‌کند که کد postscript پس از آخرین کامنت %%EOF پایان می‌یابد، زیرا برخی درایورها کد باینری «زباله» اضافی در انتها می‌افزایند که ps2eps به طور پیش‌فرض آن را حذف می‌کند.
استفاده از دستگاه bbox داخلی ghostscript به جای برنامه خارجی C به نام bbox. دستگاه bbox داخلی ghostscript مقادیر متفاوتی (گاهی حتی نادرست) تولید می‌کند، بنابراین استفاده از bbox ارائه‌شده باید پایدارتر باشد. همچنین متغیر محیطی PS2EPS_GSBBOX را ببینید.
عدم تولید کامنت %%HiResBoundingBox برای خروجی.
افزایش دقت با روشن کردن antialiasing زیرنمونه (ممکن است کندتر باشد).
نمایش اطلاعات مجوز.
نمایش فراخوانی ghostscript. این گزینه ممکن است برای حل مشکلاتی که حین فراخوانی ghostscript رخ می‌دهند مفید باشد.
نمایش هشدارهایی درباره سلامت پرونده EPS تولیدشده. برخی دستورات postscript نباید در یک پرونده EPS وجود داشته باشند. با تنظیم این گزینه، ps2eps در صورت تشخیص حداقل یکی از آن‌ها هشدار صادر می‌کند.

بر اساس کد منبع postscript داده‌شده (که در بیشتر موارد توسط درایور چاپگر postscript تولید شده است)، موانع و مشکلات بالقوه زیادی وجود دارد که ممکن است هنگام تلاش برای ایجاد پرونده‌های EPS مناسب رخ دهد. لطفاً این بخش را با دقت بخوانید تا از مشکلات رایج آگاه شوید.

یا چگونه اندازه مناسب را برای ghostscript تعیین کنیم.

اگر اسنادی دارید که بزرگ‌تر از پیش‌فرض ghostscript شما هستند (معمولاً A4 یا US letter)، باید ابعاد صفحه را صریحاً با استفاده از گزینه -s مشخص کنید. در غیر این صورت ممکن است EPS شما هنگام شطرنجی‌سازی توسط ghostscript قطع شود و در نتیجه کادر محصورکننده به اشتباه محاسبه گردد. می‌توانید تمام اندازه‌های از پیش تعریف‌شده صفحه را که ghostscript متوجه می‌شود به -s ارسال کنید. این اندازه‌ها در حال حاضر عبارتند از: 11x17, ledger, legal, letter, lettersmall, archA, archB, archC, archD, archE a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, isob0, isob1, isob2, isob3, isob4, isob5, isob6, b0, b1, b2, b3, b4, b5, c0, c1, c2, c3, c4, c5, c6, jisb0, jisb1, jisb2, jisb3, jisb4, jisb5, jisb6, flsa, flse, halfletter. متأسفانه، تمام اندازه‌ها در حال حاضر فقط در حالت عمودی (portrait) در دسترس هستند (نه افقی یا landscape).

به طور پیش‌فرض، ps2eps از یک %%BoundingBox از قبل موجود در پرونده منبع استفاده می‌کند که اغلب با اندازه قالب صفحه فیزیکی که سند برای آن چاپ شده مطابقت دارد. با این حال، باید توجه داشته باشید که این کادر محصورکننده از قبل مشخص‌شده ممکن است درست نباشد و در نتیجه یک پرونده .eps نادرست بریده‌شده (یا حتی غیرقابل استفاده) ایجاد کند. ps2eps تنها می‌تواند به همان خوبی ghostscript در رندر پرونده اصلی postscript عمل کند (اگرچه ps2eps حتی زمانی که مقادیر منفی و کسری در کادر محصورکننده اصلی وجود دارند با استفاده از جابه‌جایی خودکار کار می‌کند). بنابراین، اگر کادر محصورکننده داده‌شده خیلی کوچک است یا به هر حال نادرست است، می‌توانید با گزینه -B کادر محصورکننده موجود را نادیده بگیرید، که باعث می‌شود ghostscript از اندازه پیش‌فرض داخلی خود استفاده کند (یا از -s استفاده کنید). با این حال، اگر BoundingBox مختصات منفی داشته باشد، که طبق مشخصات مجاز نیست، ps2eps خروجی را به سمت مقادیر مثبت انتقال می‌دهد.

نکته: برای جلوگیری از چرخش تصویر اگر طرح اصلی را در قالب افقی دارید، می‌توانید از گزینه «Encapsulated Postscript» در درایور چاپگر استفاده کنید که باید یک پرونده EPS تولید کند (اما با کادر محصورکننده‌ای به اندازه برگه!). اما برخی از درایورهای چاپگر Windows تصویر را با یک آفست از پایین صفحه عمودی رسم می‌کنند، به طوری که بخشی از آن خارج از صفحه افقی رسم می‌شود. در این حالت، باید اندازه مربعی صفحه را با استفاده از حداکثر طول مشخص کنید، مثلاً 29.7cm x 29.7cm برای یک صفحه A4.

یا چرا بخشی از متن من بالای پرونده گنجانده‌شده .eps پاک می‌شود؟

برخی از درایورهای postscript یک مستطیل سفید از گوشه بالا سمت چپ صفحه تا گوشه پایین سمت راست شیء رسم می‌کنند. این کار ممکن است بخشی یا حتی تمام متن بالای پرونده EPS واردشده/گنجانده‌شده شما را پاک کند، که بسیار آزاردهنده است. به منظور جلوگیری از این امر، اکثر برنامه‌ها یک گزینه برش (clipping) برای پرونده‌های .eps واردشده دارند (در LaTeX می‌توانید از \includegraphics*{} برای این منظور استفاده کنید). اگر متأسفانه چنین امکانی وجود ندارد، می‌توانید از گزینه -C در ps2eps استفاده کنید که (امیدوارانه) این کار را برای شما انجام خواهد داد. متأسفانه، PScript.dll 5.2 (در Windows XP) کد بسیار بدرفتار جدیدی از Postscript (به نام initclip) را معرفی کرد که حتی برش بیرونی را بازنویسی می‌کند! بنابراین، فیلتر جدیدی باید در ps2eps تعبیه می‌شد که آن را برطرف کند.

با این حال، چون بیشتر برنامه‌ها مستقیماً روی کادر محصورکننده برش می‌دهند، همچنان ممکن است چند پیکسل از تصویر خود را از دست بدهید، زیرا کادر محصورکننده در تفکیک‌پذیری درشت نقاط postscript (یعنی 72 dpi) توصیف می‌شود. برای جلوگیری از این مشکل، می‌توانید از گزینه -l یا گزینه -C استفاده کنید (برای مورد دوم، برش توسط برنامه واردکننده باید غیرفعال شود) تا یک کادر محصورکننده ۱ نقطه بزرگ‌تر در نظر گرفته شود. گزینه -C در اطراف یک کادر محصورکننده ۱ نقطه بزرگ‌تر برش می‌دهد و -l مقادیر کادر محصورکننده را ۱ نقطه افزایش می‌دهد (می‌توانید هر دو گزینه را نیز ترکیب کنید).

برخی از توالی‌های postscript، برای مثال برای استفاده از ویژگی‌های خاص چاپگر (...featurebegin)، به خوبی درون یک پرونده .eps کار نمی‌کنند، بنابراین ps2eps تلاش می‌کند آن‌ها را فیلتر کند. اما لطفاً توجه داشته باشید که فیلترهای کد postscript ممکن است برای درایور چاپگر شما به درستی کار نکنند (ps2eps عمدتاً با درایورهای چاپگر HP و Adobe آزمایش شده است، اگرچه ممکن است برای همه چاپگرهایی که از PScript.dll استفاده می‌کنند کار کند). در این حالت می‌توانید فیلتر کردن را با استفاده از گزینه -n غیرفعال کنید، یا سعی کنید توالی نامناسب را در کد postscript پیدا کرده و قانون فیلتر را در اسکریپت ps2eps سازگار کنید (متغیرهای linefilter$، rangefilter_begin$، rangefilter_end$؛ متغیر linefilter عبارتی برای فیلتر کردن خطوط منفرد است، rangefilter_... عباراتی هستند که تمام خطوط بین یک الگوی منطبق با rangefilter_begin$ و rangefilter_end$ را فیلتر می‌کنند؛ اصلاحات خود را با ایمیل برای من بفرستید). با این حال، با تکامل درایورهای چاپگر (مانند PScript.dll) یا زبان postscript ممکن است شرایط تغییر کند.

برخی برنامه‌ها یا درایورها کد postscript را با کد باینری در ابتدا یا انتها تولید می‌کنند، که اغلب مفسرهای قدیمی postscript را سردرگم می‌کند. ps2eps تلاش می‌کند چنین کدهایی را حذف کند، اما ممکن است گاهی حدس نادرستی درباره شروع و پایان کد واقعی postscript بزند (یک فایل زیپ‌شده از منبع postscript را به همراه توضیحات ایمیل کنید، بخش «اشکالات (BUGS)» را ببینید).

خطوط کامنت یا حتی خطوط خالی حذف می‌شوند (که رفتار پیش‌فرض برای کوچک‌تر کردن پرونده‌های .eps است)، که ممکن است خروجی شما را خراب کند. لطفاً بخش بعدی را برای چگونگی رفع این مشکل بررسی کنید. ps2eps خطوط خالی و همچنین <CR> (کاراکتر بازگشت به ابتدای خط یا Carriage Return معادل «\r») را در انتهای خطوط حذف می‌کند. با این حال، کدهای postscript با قالب‌بندی مناسب، با استفاده از کامنت‌های «%%BeginBinary» و «%%EndBinary» نشانه می‌دهند. هنگامی که ps2eps این کامنت‌ها را تشخیص دهد، از هرگونه اقدام فیلترسازی در بخش‌های باینری علامت‌گذاری‌شده خودداری می‌کند.

دستور ps2eps همچنین کامنت‌های %%Orientation: را به طور پیش‌فرض فیلتر می‌کند (می‌توانید از گزینه -O برای غیرفعال کردن فیلتر استفاده کنید)، زیرا ghostscript ممکن است هنگام تولید تصاویر PDF تصاویر را «به‌طور خودکار و جادویی» بچرخاند، که در بیشتر موارد مطلوب نیست. نکته: می‌توانید این قابلیت را در ghostscript بدون قید و شرط با مشخص کردن AutoRotatePages=/None- غیرفعال کنید.

برخی از کدهای postscript ممکن است هنگامی که خطوط کامنت یا حتی خطوط خالی حذف می‌شوند (که حالت پیش‌فرض برای کوچک‌تر کردن پرونده‌های .eps است) خراب شوند، زیرا این پرونده‌ها ممکن است حاوی تصاویر کدگذاری‌شده‌ای باشند که % نیز به عنوان اولین نویسه در یک خط دارند یا از یک کامنت خاص به عنوان جداکننده انتهای تصویر استفاده می‌کنند. اگر چنین است، از گزینه -c برای جلوگیری از فیلتر کردن کامنت‌ها استفاده کنید.

دستور ps2eps از postscript رنگی پشتیبانی می‌کند، که در نتیجه باعث می‌شود ghostscript منابع بیشتری را برای رسم بیت‌مپ خود مصرف کند (تقریباً ۶ مگابایت برای یک صفحه A4). برنامه bbox بیت‌مپ را خط به خط می‌خواند، بنابراین فقط حافظه حداقلی مصرف می‌کند. اگر با مصرف حافظه ghostscript با مشکل مواجه شدید، می‌توانید از گزینه -m برای استفاده از تصویر تک‌رنگ (monochrome) استفاده کنید. اما این کار احتمالاً منجر به تعیین نادرست کادرهای محصورکننده در تصاویر رنگی خواهد شد، زیرا ghostscript باید کار دیترینگ سیاه‌وسفید انجام دهد و بنابراین ممکن است اشیایی را که با رنگ‌های روشن کشیده شده‌اند حذف کند.

گزینه دیگری در صورت بروز مشکلات حافظه و زمان اجرای بسیار طولانی، استفاده از bbox داخلی ghostscript است که بسیار کارآمدتر از نظر حافظه است و با استفاده از گزینه -g فعال می‌شود.

لطفاً توجه داشته باشید که گزینه خط فرمان همیشه بر متغیر محیطی مرتبط اولویت دارد.

متغیر محیطی PS2EPS_SIZE می‌تواند برای تعیین اندازه پیش‌فرض صفحه استفاده شود و هر آرگومانی را که --size می‌پذیرد دریافت کند. مثال‌ها: export PS2EPS_SIZE=a0 (نحو شبه bash) یا setenv PS2EPS_SIZE letter (نحو csh).

اگر متغیر محیطی PS2EPS_GSBBOX تنظیم شده باشد، دستگاه bbox داخلی ghostscript به جای دستور خارجی bbox استفاده خواهد شد. مثال‌ها: export PS2EPS_GSBBOX=true (نحو شبه bash) یا setenv PS2EPS_GSBBOX 1 (نحو csh).

فراخوانی معمول به سادگی به این صورت است: ps2eps -l file

یک فراخوانی نسبتاً مطمئن و بدون خطا (اگر postscript شما کوچک‌تر از iso b0 [100cm x 141.4cm] است و رایانه‌ای سریع با حافظه کافی دارید): ps2eps -l -B -s b0 -c -n file

اگر خروجی درست نیست، امتحان کنید: ps2eps -l -B -s b0 -F file

برنامه ps2eps توسط Roland Bless نوشته شده است.

برنامه‌های دیگر مانند ps2epsi کادر محصورکننده را همیشه به درستی محاسبه نمی‌کنند (زیرا مقادیر روی پشته postscript قرار می‌گیرند که ممکن است توسط کد نامناسب postscript خراب شود) یا آن را گرد می‌کنند به طوری که برش زدن EPS بخشی از تصویر را قطع می‌کند. ps2eps از دقت مضاعف با تفکیک‌پذیری 144 dpi و گرد کردن مناسب برای به دست آوردن یک کادر محصورکننده دقیق استفاده می‌کند. دستگاه bbox داخلی ghostscript مقادیر متفاوتی (گاهی حتی نادرست) تولید می‌کند، بنابراین استفاده از bbox ارائه‌شده پایدارتر است. با این حال، از آنجا که برش معمولی فقط دارای تفکیک‌پذیری 1/72dpi (نقطه postscript) است، فرآیند برش ممکن است همچنان بخش‌هایی از تصویر EPS شما را پاک کند. در این صورت لطفاً از گزینه -l برای افزودن یک نقطه فضای سفید اضافی در اطراف کادر محصورکننده استفاده کنید.

افرادی در ارائه کد یا پیشنهادهایی برای بهبود ps2eps مشارکت داشته‌اند. در اینجا دست‌کم نام برخی از آن‌ها آمده است (عذرخواهی می‌کنم اگر نام کسی از قلم افتاده است): Christophe Druet, Hans Ecke, Berend Hasselman, Erik Joergensen, Koji Nakamaru, Hans Fredrik Nordhaug, Michael Sharpe. تشکر ویژه از Michael Sharpe از UCSD که ویژگی‌های مفید زیادی را برای ps2eps پیشنهاد داد و bbox را برای دقیق‌تر و پایدارتر شدن اصلاح کرد.

نسخه اولیه این صفحه راهنما در اصل توسط Rafael Laboissiere <rafael at debian.org> برای سیستم دبیان نوشته شده بود. متشکریم Rafael!

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License) نسخه 1.1 یا هر نسخه بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد داده می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد.

اگر با مشکلی مواجه شدید، لطفاً ابتدا تمام نکات بخش «عیب‌یابی (TROUBLESHOOTING)» را با دقت بررسی کنید. در غیر این صورت، برای نسخه به‌روزشده به نشانی <URL:http://www.tm.uka.de/~bless/ps2eps> مراجعه کنید یا یک پرونده فشرده‌شده gzipped از کد منبع مربوطه postscript را به همراه شرح خطای خود و شماره نسخه ps2eps به <roland at bless.de> ارسال کنید (لطفاً مدتی برای دریافت پاسخ صبور باشید).

bbox (1), gs (1), ps2epsi (1)

September 1st, 2018