PURIFYEPS(1) PURIFYEPS(1)

purifyeps - سازگار کردن یک فایل Encapsulated PostScript با هر دو ابزار dvips و pdflatex

purifyeps --help

purifyeps --version

purifyeps [--fontmap=.fmp file] [.eps input file [.eps output file]]

purifyeps --make-man[=filename] [--section=section]

purifyeps --make-ps-man[=filename] [--section=section]

در حالی که pdflatex ویژگی‌های مثبت متعددی دارد، کاستی اصلی آن در مقایسه با ترکیب استاندارد latex+dvips این است که توانایی خواندن فایل‌های معمولی Encapsulated PostScript (EPS) که رایج‌ترین قالب گرافیکی در دنیای LaTeX هستند را ندارد. pdflatex تنها قادر به خواندن انواع فایل‌های گرافیکی زیر است:

بیشتر کسانی که از pdflatex استفاده می‌کنند، اسناد خود را با ابزاری مانند epstopdf به PDF تبدیل می‌کنند. این کار به خوبی عمل کرده و ماهیت برداری فایل EPS اصلی را حفظ می‌کند. متأسفانه dvips فایل‌های PDF را نمی‌خواند؛ بنابراین اگر قرار باشد سند هم با latex+dvips و هم با pdflatex پردازش شود، باید دو نسخه از تصویر نگهداری شود.
قالب PNG یک قالب بیت‌مپ (شطرنجی) است و در نتیجه مقیاس‌پذیری ضعیفی دارد. همچنین dvips قالب PNG را نمی‌خواند؛ بنابراین اگر قرار باشد سند هم با latex+dvips و هم با pdflatex پردازش شود، باید دو نسخه از تصویر نگهداری شود.
قالب JPEG یک قالب بیت‌مپ (شطرنجی) است و در نتیجه مقیاس‌پذیری ضعیفی دارد. همچنین dvips قالب JPEG را نمی‌خواند؛ بنابراین اگر قرار باشد سند هم با latex+dvips و هم با pdflatex پردازش شود، باید دو نسخه از تصویر نگهداری شود.
این احتمالاً کم‌استفاده‌ترین قالب گرافیکی سازگار با pdflatex است. MPS در واقع نسخه‌ای سفارشی‌شده از EPS است که توسط MetaPost خروجی داده می‌شود. همانند PDF، قالب MPS نیز یک قالب برداری است و هنگام وارد شدن به سند pdflatex برداری باقی می‌ماند. همچنین مانند PDF، دستور dvips فایل‌های MPS را نمی‌خواند؛ بنابراین اگر قرار باشد سند هم با latex+dvips و هم با pdflatex پردازش شود، باید دو نسخه از تصویر نگهداری شود.

ایدهٔ اصلی در طراحی purifyeps این است که تفاوت‌های میان MPS و EPS بسیار اندک و جزئی هستند و می‌توان یک فایل را به قالبی تبدیل کرد که هم‌زمان با مشخصات هر دو قالب MPS و EPS مطابقت داشته باشد. دستور purifyeps یک فایل EPS را به عنوان ورودی دریافت می‌کند، با استفاده از فیلتر "mpost" در pstoedit آن را به MetaPost (.mp) تبدیل می‌نماید، سپس mpost را روی فایل اجرا کرده تا آن را به MPS تبدیل کند، و در نهایت اصلاحاتی روی نتیجه اعمال می‌کند تا فایل را به EPS بازگرداند، در حالی که قابلیت پردازش و خوانده شدن آن توسط pdflatex نیز حفظ می‌شود.

نمایش بخش‌های «نحوه استفاده (Usage)» و «گزینه‌ها (Options)» از مستندات purifyeps.
نمایش شماره نسخه، حق نشر (کپی‌رایت) و مجوز purifyeps.
مشخص کردن نام فایلی که به purifyeps نحوه نگاشت نام‌های قلم TeX به نام‌های قلم PostScript را مشخص می‌کند. [پیش‌فرض: mpost.fmp]
تولید خودکار صفحه راهنمای یونیکس (man page) برای purifyeps. پارامتر section بخش مربوطه را تعیین می‌کند [پیش‌فرض: 1 (دستورات کاربر)]. مقدار filename به طور پیش‌فرض purifyeps.1 است یا در صورت مشخص شدن section، نام فایلی متناظر با آن خواهد بود.
تولید خودکار یک نسخه PostScript از مستندات purifyeps. این مستندات همانند یک صفحه راهنمای یونیکس قالب‌بندی می‌شوند. پارامتر section بخش مربوطه را تعیین می‌کند [پیش‌فرض: 1 (دستورات کاربر)]. مقدار filename به طور پیش‌فرض purifyeps.ps است.

در عملکرد عادی (یعنی زمانی که بدون گزینه‌های "--help"، "--make-man" یا "--make-ps-man" اجرا شود)، purifyeps نام یک فایل ورودی و یک فایل خروجی را دریافت می‌کند. می‌توان با اطمینان از یک نام فایل مشترک برای هر دو استفاده کرد. اگر نام فایل خروجی ذکر نشود، خروجی به دستگاه خروجی استاندارد (stdout) ارسال می‌شود. اگر نام فایل ورودی ذکر نشود، purifyeps ورودی را از دستگاه ورودی استاندارد (stdin) می‌خواند.

ایجاد یک نسخه PostScript از مستندات purifyeps، اما با نام happydoc.ps به جای نام پیش‌فرض purifyeps.ps:

purifyeps --make-ps-man=happydoc.ps

ایجاد صفحه راهنمای یونیکس برای purifyeps (در قالب معمول roff)، اما با تعیین بخش "LOCAL" به جای بخش پیش‌فرض 1:

purifyeps --make-man --section=LOCAL

پالایش فایل sample.eps (در حالی که mpost.fmp در دایرکتوری جاری قرار دارد):

purifyeps sample.eps sample.eps

پالایش فایل sample.eps (در حالی که mpost.fmp در مکان دیگری قرار دارد):

purifyeps --fontmap=/usr/share/pstoedit/mpost.fmp sample.eps sample.eps

تغییر نام نسخه پالایش‌شده هنگام پالایش:

purifyeps sample.eps sample-pure.eps

انجام همین کار، اما در یک خط‌لوله (pipeline) یونیکس:

cat sample.eps | purifyeps > sample-pure.eps

هنگام اجرای purifyeps، باید خروجی هر دو ابزار pstoedit و mpost را مشاهده کنید که پس از آن پیام موفقیت از طرف purifyeps نمایش داده می‌شود:

% cat sample.eps | purifyeps > sample-pure.eps
pstoedit: version 3.30 / DLL interface 107 (build Mar 14 2002) :
Copyright (C) 1993 - 2001 Wolfgang Glunz
Interpreter finished. Return status 0
This is MetaPost, Version 0.641 (Web2C 7.3.1)
(/tmp/purifyeps-jdeGPkh9.mp [1] )
1 output file written: purifyeps-jdeGPkh9.1
Transcript written on purifyeps-jdeGPkh9.log.
File seems to have been purified successfully.

فایلی شامل نگاشت‌های بین نام‌های قلم TeX و PostScript. برای توضیحات بیشتر درباره محتویات این فایل به بخش "نکات (NOTES)" مراجعه کنید.

گزارش خطاها قطعاً جای بهبود دارد. پیام‌های خطای تولیدشده توسط pstoedit و mpost گاهی بدون هیچ هشداری نادیده گرفته می‌شوند. همچنین بروز خطا گاهی باعث می‌شود purifyeps فایل‌های موقت (purifyeps-#####) را روی دیسک به جا بگذارد.

دستور purifyeps مشمول تمام محدودیت‌هایی است که بر pstoedit و به‌ویژه بک‌اند "mpost" در pstoedit تأثیر می‌گذارند. در نتیجه، purifyeps برخی از ساختارهای PostScript مانند متن‌هایی با مقیاس غیریکنواخت را نادیده می‌گیرد.

دستور purifyeps به فایلی نیاز دارد که نحوه نگاشت نام‌های قلم TeX به نام‌های قلم PostScript را مشخص کند. این فایل باید شامل دو ستون باشد که با فاصله از هم جدا شده‌اند. ستون اول نام قلم PostScript و ستون دوم معادل TeX آن را فهرست می‌کند. خطوط خالی و خطوطی که با "%" آغاز می‌شوند نادیده گرفته می‌شوند. متن زیر نمونه‌ای از یک فایل .fmp است:

% This is a sample font map for purifyeps.
Times-Bold                           ptmb
Times-Italic                         ptmri
Times-Roman                          ptmr
Helvetica                            phvr
Helvetica-Bold                       phvb
Helvetica-Oblique                    phvro
Courier                              pcrr
Courier-Bold                         pcrb
Courier-Oblique                      pcrro

توجه داشته باشید که این دقیقاً همان قالبی است که pstoedit استفاده می‌کند. به طور پیش‌فرض، purifyeps در دایرکتوری جاری به دنبال نگاشت قلمی به نام mpost.fmp می‌گردد. گزینه خط فرمان "--fontmap" به purifyeps دستور می‌دهد تا از نگاشت قلم متفاوتی استفاده کند، که معمولاً همان فایل mpost.fmp همراه با pstoedit است.

هنگامی که فایل‌های EPS پالایش‌شده را با purifyeps ایجاد کردید، باید به pdflatex اعلام کنید که از آن‌ها استفاده کند. پیکربندی pdfLaTeX برای بسته‌های "graphics" و "graphicx" (pdftex.def) به طور معمول فایل‌های .eps را نادیده می‌گیرد. قرار دادن کد LaTeX زیر در مقدمه (Preamble) سند به pdflatex اعلام می‌کند که تمامی فایل‌های .eps در قالب MPS هستند:

% Tell pdfLaTeX that all .eps files were produced by MetaPost.
\usepackage{graphicx} % or graphics
\usepackage{ifpdf}
\ifpdf
  \DeclareGraphicsRule{.eps}{mps}{*}{}
  \makeatletter
    \g@addto@macro\Gin@extensions{,.eps}
  \makeatother
\fi

dvips(1), epstopdf(1), latex(1), mpost(1), pdflatex(1), pstoedit(1)

Scott Pakin, scott+peps@pakin.org

2010-11-28 v1.1