chem(1) General Commands Manual chem(1)

chem - جایگذاری نمودارهای ساختار شیمیایی در اسناد groff

chem [--] [file ...]
chem -h
chem --help
chem -v
chem --version

دستور chem نمودارهای ساختار شیمیایی را تولید می‌کند. نسخه فعلی برای شیمی آلی (پیوندها، حلقه‌ها) مناسب‌ترین است. برنامه chem یک پیش‌پردازنده groff مانند eqn، pic، tbl و غیره است. این برنامه خروجی pic تولید می‌کند، به طوری که تمام بخش‌های chem به نمودارهایی به زبان pic ترجمه می‌شوند.

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

برنامه chem از فایل منبع پرل chem.pl سرچشمه می‌گیرد. این برنامه به pic دستور می‌دهد تا رونوشتی از فایل ماکروی chem.pic را اضافه کند. علاوه بر این، فایل منبع groff به نام pic.tmac نیز بارگذاری می‌شود.

نمودارهای chem به سبکی مشابه eqn و pic، به یک زبان ویژه نوشته می‌شوند.

مجموعه‌ای از خطوط chem به این شکل است:

.cstart
chem data
.cend

خطوط حاوی کلیدواژه‌های .cstart و .cend به ترتیب ورودی chem را آغاز کرده و پایان می‌دهند. در بافت pic، یعنی پس از فراخوانی .PS، ورودی chem را می‌توان به صورت اختیاری به جای آن با خط begin chem آغاز کرده و با خطی شامل تک‌کلمه end پایان داد.

هر چیزی بیرون از این خطوط مقداردهی اولیه، بدون تغییر عبور داده می‌شود؛ تمام داده‌های میان این خطوط اولیه به دستورات pic برای رسم نمودار تبدیل می‌شوند.

به عنوان مثال:

.cstart
CH3
bond
CH3
.cend

دو گروه CH3 را با یک پیوند میان آن‌ها چاپ می‌کند.

اگر می‌خواهید فقط خروجی groff ایجاد کنید، باید chem و به دنبال آن groff را همراه با گزینه -p برای فعال‌سازی pic اجرا کنید:

chem [file ...] | groff -p ...

برنامه chem به ماژول پرل Math::Trig نیاز دارد که از طریق CPAN در دسترس است.

زبان ورودی chem نسبتاً کوچک است. این زبان حلقه‌هایی با سبک‌های گوناگون و روشی برای اتصال دلخواه آن‌ها به یکدیگر، پیوندهایی با سبک‌های مختلف، گروه‌ها یا بخش‌های مولکولی (moieties) (مانند C، NH3 و غیره) و رشته‌ها را فراهم می‌آورد.

متغیرهایی وجود دارند که می‌توان آن‌ها را با دستورات تنظیم کرد. این دستورات دو قالب ممکن دارند؛ یا

variable value

یا

variable = value

این دستور variable مربوطه را برابر با آرگومان value قرار می‌دهد. اگر آرگومان‌های بیشتری داده شود، تنها آخرین آرگومان در نظر گرفته شده و سایر آرگومان‌ها نادیده گرفته می‌شوند.

تنها چند متغیر وجود دارند که می‌توان با این دستورات تنظیم کرد:

تنظیم ارتفاع متن روی arg؛ پیش‌فرض 0.16 است.
تنظیم عرض نویسه روی arg؛ پیش‌فرض 0.12 است.
تنظیم طول پیوند روی arg؛ پیش‌فرض 0.2 است.
مقیاس‌بندی نمودار برای اینکه در اندازه پوینت arg مناسب به نظر برسد؛ پیش‌فرض 10 پوینت است.

bond [direction] [length n] [from Name|picstuff]

دستور bond یک پیوند یگانه را در جهت مشخص‌شده از نزدیک‌ترین گوشه Name رسم می‌کند. bond همچنین می‌تواند به صورت double bond، front bond، back bond و غیره باشد. (به زودی به Name بازخواهیم گشت.)

مولفه direction زاویه بر حسب درجه است (0 به سمت بالا، در جهت عقربه‌های ساعت مثبت است) یا یک کلمه جهت مانند up، down، sw (= southwest یا جنوب غربی) و غیره. اگر هیچ جهتی مشخص نشود، پیوند در جهت جاری (معمولاً جهت آخرین پیوند) رسم می‌شود.

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

CH3
bond (این یکی از CH3 به سمت راست می‌رود)
C (در انتهای سمت راست پیوند)
double bond up (از C)
O (در انتهای پیوند دوگانه)
bond right from C
CH3

می‌توان طول پیوند را بر حسب اینچ مشخص کرد تا طول پیش‌فرض بازنویسی شود. سایر دستورات pic را می‌توان به انتهای دستور پیوند متصل کرد تا پیوندهای نقطه‌چین یا خط‌چین ایجاد شوند یا یک مکان to مشخص شود.

حلقه‌های فراوانی وجود دارند، اما تنها حلقه‌های پنج‌ضلعی و شش‌ضلعی به طور گسترده پشتیبانی می‌شوند. دستور ring به تنهایی یک حلقه شش‌ضلعی است؛ benzene حلقه بنزن با یک دایره درون آن است. aromatic یک دایره درون هر نوع حلقه‌ای قرار می‌دهد.

ring [pointing (up|right|left|down)] [aromatic] [put Mol at n] [double i,j k,l ... [picstuff]

رأس‌های یک حلقه با 1، 2، ... از رأسی که در جهت طبیعی قطب‌نما اشاره می‌کند، شماره‌گذاری می‌شوند. بنابراین برای یک حلقه شش‌ضلعی که رأس آن به سمت بالاست، رأس بالا 1 است؛ در حالی که اگر حلقه رأسی در سمت شرق داشته باشد، آن رأس 1 خواهد بود. این مفهوم به این شکل بیان می‌شود:

R1: ring pointing up
R2: ring pointing right

رأس‌های حلقه .V1، ...، .Vn، نام‌گذاری می‌شوند که .V1 در جهت اشاره قرار دارد. بنابراین گوشه‌های R1 عبارتند از R1.V1 (بخش بالا)، R1.V2، R1.V3، R1.V4 (بخش پایین) و غیره؛ در حالی که برای R2، راس R2.V1 راست‌ترین رأس و R2.V4 چپ‌ترین رأس است. این نام‌های رأس‌ها برای اتصال پیوندها یا سایر حلقه‌ها استفاده می‌شوند. به عنوان مثال:

R1: benzene pointing right
R2: benzene pointing right with .V6 at R1.V2

دو حلقه بنزن متصل در امتداد یک ضلع ایجاد می‌کند.

پیوندهای دوگانه داخلی به صورت double n1,n2 n3,n4 ...؛ مشخص می‌شوند؛ هر جفت عدد یک پیوند داخلی اضافه می‌کند. بنابراین شکل جایگزین حلقه بنزن عبارت است از:

ring double 1,2 3,4 5,6

هتروسیکل‌ها (حلقه‌هایی که در یکی از رأس‌های آن‌ها عنصری غیر از کربن قرار دارد) به صورت put X at V، نوشته می‌شوند، مانند:

R: ring put N at 1 put O at 2

در این هتروسیکل، R.N و R.O مترادف‌هایی برای R.V1 و R.V2 می‌شوند.

دو نوع حلقه پنج‌ضلعی وجود دارد. ring5 پنج‌ضلعی است که یک ضلع آن با حلقه شش‌ضلعی همخوانی دارد؛ این حلقه دارای چهار جهت طبیعی است. یک flatring یک حلقه پنج‌ضلعی است که با برش دادن یک گوشه از یک حلقه شش‌ضلعی ایجاد شده است تا دقیقاً با حلقه‌های شش‌ضلعی منطبق شود.

توضیحات یک حلقه باید در یک خط واحد جا شود.

یک گروه یا جزء ساختاری (moiety)، رشته‌ای از نویسه‌ها است که با یک حرف بزرگ آغاز می‌شود، مانند N(C2H5)2. اعداد به زیرنویس تبدیل می‌شوند (مگر اینکه مقادیر کسری به نظر برسند، مانند N2.5H). نام یک گروه پس از حذف نویسه‌های خاص از آن تعیین می‌شود؛ برای مثال، N(C2H5)2 دارای نام NC2H52 خواهد بود.

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

B1: bond ; OH

در اینجا گروه OH است؛ که پس از یک پیوند قرار می‌گیرد.

در شیوه دوم، یک گروه می‌تواند به عنوان اولین کلمه در یک دستور شبه‌ pic قرار گیرد، مانند:

CH3 at C + (0.5,0.5)

در اینجا گروه CH3 است. این گروه در موقعیتی نسبت به C، گروهی که پیش‌تر در ساختار شیمیایی استفاده شده، قرار می‌گیرد.

بنابراین نام گروه‌ها را می‌توان به عنوان موقعیت‌های chem در همه جای کد chem مشخص کرد. در پس ظاهر چاپی خود، گروه‌ها در واقع نام‌هایی برای مکان‌ها هستند.

گروه BP خاص است. این گروه چاپ نمی‌شود، بلکه تنها به عنوان یک نشانه برای ارجاع در دستورات بعدی chem به کار می‌رود. به عنوان مثال:

bond ; BP

نشانه‌ای را در انتهای پیوند قرار می‌دهد. سپس می‌توان از این نشانه برای تعیین یک مکان استفاده کرد. نام BP از branch point (نقطه انشعاب یا تقاطع خطوط) گرفته شده است.

رشته‌ای که درون علامت نقل‌قول دوتایی " قرار دارد به عنوان بخشی از دستور chem تفسیر می‌شود. این نشان‌دهنده رشته‌ای است که باید (بدون نقل‌قول‌ها) چاپ شود. با متن درون نقل‌قول "..." کم و بیش مانند یک گروه رفتار می‌شود، با این تفاوت که هیچ تغییری در بخش نقل‌قول‌شده اعمال نمی‌شود.

در زنجیره آلکیل بالا، توجه کنید که اتم کربن C هم برای رسم یک شیء و هم به عنوان نامی برای یک مکان استفاده شد. یک گروه همیشه نامی را برای یک مکان تعریف می‌کند؛ شما می‌توانید در عوض از نام‌های دلخواه خود برای مکان‌ها استفاده کنید، و در واقع، برای حلقه‌ها مجبور به انجام این کار خواهید بود. یک نام به سادگی به صورت زیر است:

Name: ...

مقدار Name اغلب نام یک گروه مانند CH3 است، اما لزوماً نیازی نیست چنین باشد. هر نامی که با یک حرف بزرگ آغاز شود و تنها شامل حروف و اعداد باشد معتبر است.

First: bond
       "bond 30 from First"

ساختار ویژه

معادل است با:

bond
moiety

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

نویسه نقطه . یا علامت نقل‌قول تکی ' در اولین ستون یک خط، نشان‌دهنده یک دستور troff است که عیناً عبور داده می‌شود.

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

خطی که اولین کلمه آن pic باشد، پس از حذف کلمه pic عیناً عبور داده می‌شود.

دستور

size n

نمودار را مقیاس‌بندی می‌کند تا در اندازه پوینت n مناسب به نظر برسد (پیش‌فرض 10 پوینت است).

هر چیز دیگری به عنوان کد pic فرض شده و همراه با یک برچسب عیناً عبور داده می‌شود.

از آنجا که chem یک پیش‌پردازنده pic است، امکان درج عبارات pic در میانه یک نمودار برای رسم مواردی که خود chem فراهم نکرده، وجود دارد. چنین عبارات picی جهت وضوح بیشتر باید با افزودن کلمه pic به عنوان اولین کلمه خط، در کد chem گنجانده شوند.

دستورات pic زیر به عنوان دستورات chem پذیرفته می‌شوند، بنابراین نیازی به کلمه دستوری pic نیست:

define آغاز تعریف یک ماکروی pic درون chem.
[
آغاز یک بلوک ترکیبی (block composite).
]
پایان یک بلوک ترکیبی.
{
آغاز بلوک تعریف ماکرو.
}
پایان بلوک تعریف ماکرو.

نام‌های ماکرو از دستورات define ذخیره شده و فراخوانی آن‌ها نیز به عنوان دستور chem پذیرفته می‌شود.

این فهرست کارهای انجام‌نشده (TODO) توسط برایان کرنیهان (Brian Kernighan) گردآوری شده است.

بررسی خطاها بسیار حداقلی است؛ خطاها معمولاً به شیوه‌ای مبهم و غیرمستقیم توسط pic تشخیص داده شده و گزارش می‌شوند.

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

سازوکار گسترش، ایجاد ماکروهای pic است، اما نوشتن درست آن‌ها دشوار است و تمام ویژگی‌های اشیاء توکار را دارا نیستند.

هنوز فرمول‌نویسی درون‌خطی شیمیایی وجود ندارد (برای مثال، مشابه ساختار $...$ در eqn).

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

پیوندهای ناشی از اتم‌های استخلافی روی هتروسیکل‌ها بدون افزودن اندکی کد pic در محل مناسب متصل نمی‌شوند.

هیچ ساختار پایه مناسبی برای کروشه‌ها وجود ندارد.

متن (رشته‌های درون نقل‌قول) چندان خوب کار نمی‌کند.

نیاز به پیوند موج‌دار (squiggle bond) وجود دارد.

/usr/share/groff/1.24.1/pic/chem.pic
مجموعه‌ای از ماکروهای pic مورد نیاز chem.
/usr/share/groff/1.24.1/tmac/pic.tmac
فایل ماکرویی که .PS، .PE و .PF را برای وسط‌چین کردن نمودارهای pic مجدداً تعریف می‌کند.
/usr/share/doc/groff-1.24.1/examples/chem/*.chem
فایل‌های مثال برای chem.
/usr/share/doc/groff-1.24.1/examples/chem/122/*.chem
فایل‌های مثال از مقاله chem توسط نویسندگان آن: “CHEM—A Program for Typesetting Chemical Structure Diagrams: User Manual” (CSTR #122).

نسخه گنو chem توسط برند وارکن (Bernd Warken) نوشته شده است. این برنامه بر اساس مستندات نسخه اولیه awk از chem، اثر برایان کرنیهان (Brian Kernighan) ساخته شده است.

“CHEM—A Program for Typesetting Chemical Diagrams: User Manual” نوشته جان ال. بنتلی (Jon L. Bentley)، لین دابلیو. جلینسکی (Lynn W. Jelinski) و برایان دابلیو. کرنیهان (Brian W. Kernighan)، سال 1992، گزارش فنی علوم محاسبات آزمایشگاه‌های بل AT&T شماره 122 (AT&T Bell Laboratories Computing Science Technical Report No. 122)

groff(1)، pic(1)

2026-03-15 groff 1.24.1