Showing posts with label LaTeX. Show all posts
Showing posts with label LaTeX. Show all posts

Tuesday, September 30, 2014

Ավարտական աշխատանքի տեքստի ձևավորումը

Վաղուց ես ուզում էի գրել այս թեմայով և ներկայացնել տարիների ընթացքում իմ կուտակած փորձն ու դիտարկումների արդյունքները։ Բայց ստացվեց այնպես, որ վերջերս ես ավելի հաճախ սկսեցի հանդիպել անփույթ ձևավորված տեքստերի, և ավելի հաճախ սկսեցի հարցեր ստանալ այն մասին, թե ինչպես ավարտական կամ կուրսային աշխատանքի փաստաթուղթը կազմելիս ստանալ այս կամ այն արդյունքը։ Օրինակ, ինչպե՛ս ձևավորել գեղեցիկ ու ճիշտ տիտղոսաթերթ, ինչպե՛ս կազմել և որտե՛ղ տեղադրել բովանդակության ցանկը, ինչպե՛ս փաստաթղթում ներդնել պատկերներ, աղյուսակներ, ինչպե՛ս կազմել գրականության (կամ աղբյուրների) ցանկը և հղումներ կատարել դրա տարրերին, ինչպե՛ս և ի՛նչ տեսքով ներկայացնել ծրագրավորման լեզուների տեքստը և այլն, և այլն։ Այս և շատ այլ հարցերի մասին եմ ես պատմում իմ գրառման մեջ՝ որպես աշխատանքային գործիք օգտագործելով TeX հրատարակչական համակարգի համար ստեղծված LaTeX մակրոսների փաթեթը։
Ամեն ինչ գրելիս ես ենթադրում եմ հայերեն տեքստերը, հետևաբար ենթադրում եմ նաև, որ ձեռագիրը պատրաստված է Unicode (ավելի կոնկրետ՝ UTF-8) կոդավորմամբ, և օգտագործվում է LaTeX-ի xetex իրականացման xelatex ծրագիրը։

Փաստաթղթի մակետի ընտրություն

Մակետ (LaTeX-ում ասում են document class) ասելով հասկացվում է փաստաթղթի ընդհանուր հատկությունների ամբողջությունը։ Օրինակ, լուսանցքների չափը, վերնագրերի ձևավորումը, ցանկերի կազմակերպումը, ոչ-տեքստային օբյեկտների տեղադրումը և այլն։ Ստանդարտ LaTeX փաթեթում առավել հաճախ օգտագործվում են չորս հիմնական մակետներ. letter, որ նախատեսված է նամակների համար, article՝ հոդվածների պատրաստման համար, report` ավելի ընդարձակ հոդվածների, փոքր գրքերի, ատենախոսությունների համար, book` լիարժեք գրքերի համար։

Ուսանողական ավարտական (կամ մագիստրոսական) աշխատանքի տեքստի պատրաստման համար ամենահարմարը report մակետն է: Սա հնարավորություն է տալիս \chapter, \section, \subsection այլ նմանատիպ մակրոսներով փաստաթուղթը բաժանել գլուխների, բաժինների ենթաբաժինների և այլ տրամաբանական մասերի։ Մակետի ընտրությունը կատարվում է LaTeX ձեռագրի \documentclass մակրոսով։
\documentclass[a4paper,11pt]{report}
Քառակուսի փակագծերում նշված a4paper պարամետրով նշված է, որ փաստաթուղթը կառուցելիս պետք է նկատի ունենալ A4 ստանդարտի տպագրական թուղթը, իսկ 11pt պարամետրն ասում է, որ տեքստի հիմնական տպատառի չափը 11 է և օգտագործվող մյուս բոլոր տառերի չափն ընտրվելու է 11 չափի հարաբերությամբ։

Լռելությամբ report մակետում ընդունված է լուսանցքների այնպիսի չափ, որ տեքստի համար մնացած տարածում, հաշվի առնելով ընթեռնելիության որոշ հարցեր, մեկ տողը պարունակի 60-70 տառ (նիշ)։ Բայց մեզ մոտ ընդունված չէ այդպիսի լայն լուսանցքներ։ Սովորաբար ընտրվում է (և աչքի համար էլ հաճելի է) ձախից և ներքևից 3 սմ, իսկ աջից և վերևից՝ 2 սմ լուսանցքներ։ Այս կարգավորումներն անելու համար կարելի է օգտագործել geometry փաթեթը՝ \usepackage հրամանի պարամերտրերում տալով լուսանցքների նախընտրելի չափերը։
\usepackage[top=2cm,bottom=3cm,left=3cm,right=2cm]{geometry}

Տպատառերի (կամ տառատեսակների) ընտրություն

Քանի որ մեր բուհերում ավարտական աշխատանքների պաշտպանության ներկայացվող տեքստերը պատրաստվում են հիմնականում հայերենով, ապա ես ուզում եմ հղում կատարել իմ բլոգի մեկ այլ գրառման՝ Հայերեն LaTeX, որտեղ ես մանրամասն պատմում եմ, թե ինչպես LaTeX-ն օգտագործել հայերեն փաստաթղթեր պատրաստելու համար։ Այդտեղ պատմում եմ նաև տպատառերի ընտրության մասին։

Տիտղոսաթերթի պատրաստումը

Տարիների ընթացքում ստացվել է այնպես, որ մեր բուհերում ներկայացվող ավարտական կամ կուրսային աշխատանքների տիտղոսաթերթերն ունեն մի ընդհանուր սխեմա՝ երբեմն այս կամ այն մանր փոփոխություններով։ Ստորև իմ մագիստրոսական աշխատանքի տիտղոսաթերթի նկարն է.
Չեմ պնդում, որ սա անթերի և օրինակելի սխեմա է, բայց այն ընդունելի է շատերի կողմից, իսկ ինձ արված միակ դիտողությունն այն էր, թե էջի վերևում «Երևանի Պետական Համալսարան» ու «Տեղեկատվական Տեխնոլոգիաների Կրթական և Հետազոտական Կենտրոն» արտահայտություններում պետք չէ բոլոր բառերը սկսել մեծատառերով։

LaTeX կոդը, որով ես կառուցել եմ այս տիտղոսաթերթը, այնքան պարզ է, որ նույնիսկ մեկնաբանությունների կարիք չկա։ Ստորև ներկայացնում եմ այն.
% titlepage միջավայրը սկսում է նոր մաքուր էջ, որի վրա բացակայում է էջի համարը
\begin{titlepage}

\begin{centering}
\LARGE{Երևանի \ Պետական \ Համալսարան}\\
\Large{Տեղեկատվական Տեխնոլոգիաների Կրթական և Հետազոտական Կենտրոն}\par
\vskip6cm
\textbf{\Huge{ԱՎԱՐՏԱԿԱՆ~~ԱՇԽԱՏԱՆՔ}}\par
\end{centering}

\null\smallskip\null

\begin{centering}
\begin{tabular}{rl}
\textbf{Թեմա:}    & \textit{Բովանդակությամբ հասցեավորվող հիշող սարքերը}\\
                   & \textit{տեստավորող ալգորիթմների կառուցում} \\[4pt]
\textbf{ՈՒսանող:} & \textit{Արմեն Բադալյան} \\[4pt]
\textbf{Ղեկավար:} & տ.~գ.~թ.~\textit{Գուրգեն Հարությունյան} \\
\end{tabular}
\par
\end{centering}

\null\vfill\null

\begin{centering}
Երևան - 2011\par
\end{centering}

\end{titlepage}

Տեքստի տրամաբանական տրոհում

report մակետում տեքստի տրամաբանական տրոհման ամենամեծ միավորը «գլուխ»-ն է, որ սկսվում է \chapter մակրոսով։ Բացի այն, որ \chapter մակրոսը վերնագիրը ձևավորում է տվյալ պահին որոշված ոճով, այն նաև մեկով ավելացնում է գլուխների հաշվիչի արժեքը։ Օրինակ,
\chapter{Ծրագրի ընդհանուր նկարագրություն}
Հաջորդ տրամաբանական միավորները «բաժին», «ենթաբաժին» և «ենթա-ենթաբաժին»-ն են, որ սկսվում են համապատասխանաբար \section, \subsection և \subsubsection մակրոսներով։ Այդ միավորներից ամեն մեկն ունի իր հաշվիչը, որոնց արժեքը ավելանում է համապատասխան մակրոսի կիրառմամբ, իսկ այդ հաշվիչների արժեքն արտածվում է վերնագրի մեջ։ Օրինակ, իմ աշխատանքի երրորդ գլուխն ուներ հետևյալ տեքստը.
Տեքստի տրամաբանական տրոհման հրամանները տեղեկություններ են հավաքում նաև բովանդակության ցանկն արտածող \tableofcontents հրամանի համար։ Սովորաբար բովանդակության ցանկը տեղադրում են տիտղոսաթերթից հետո։
    Եթե փաստաթուղթը հավելվածներ է պարունակում, ապա ձեռագրի համապատասխան տեղում պետք է ավելացնել \appendix մակրոսը։ Այդ կետից սկսած գլուխների վերնագրերը կսկսվեն «Հավելված» (կամ «Appendix») բառով և կհամարակալվեն լատինական այբուբենի տառերով։ Օրինակ այսպես.

Պատկերների տեղադրում

LaTeX-ը հնարավորություն է տալիս փաստաթղթում ներդնել (համարյա) կամայական ֆորմատի պատկերներ (նկարներ). PNG, JPEG, EPS և այլն։ Նախ հարկավոր է կցել graphicx փաթեթը.
\usepackage{graphicx}
Հետո, տեքստի այն տեղում, որտեղ պետք է ներդրվի նկարը, \includegraphics մակրոսով նշվում է նկարի ֆայլի անունը։ Օրինակ, camcell.png նկարը 0.85 մասշտաբով ներդնելու համար պետք է գրել.
\includegraphics[scale=.85]{camcells.png}
LaTeX-ում նախատեսված են այսպես կոչված «սահող» (floating) միջավայրեր։ Դրանք նախատեսված են պարունակել օբյեկտներ, որոնք ամբողջությամբ պետք է տեղավորվեն մեկ էջի վրա, ինչպես նաև թույլ են տալիս այդ օբյեկտների համար սահմանել վերնագրեր ու խաչաձև հղումների նշիչներ (labels)։ Նկարները տեքստում տեղադրվում են figure սահող միջավայրի օգնությամբ։ Օրինակ,
\begin{figure}[h]
\centering
\includegraphics[scale=.85]{camcells.png}
\caption{\textsf{SRAM}, \textsf{BCAM} բջիջներ։}
\label{fig:cells}
\end{figure}
Ձեռագրի այս հատվածն ասում է, որ 0.85 մասշտաբով ներդրվում է camcells.png նկարը, որի ներքևում գրվելու է «SRAM, BCAM բջիջներ։» վերնագիրը (\caption), իսկ խաչաձև հղումների համար օգտագործվելու է fig:cells նշիչը (\label)։ Իսկ \centering մակրոսի կիրառումը նշում է, որ նկարը հորիզոնական ուղղությամբ պետք է կենտրոնադրվի։
    \begin{figure} տողի պոչից գրված [h] պարամետրը ցույց է տալիս, որ նկարը պետք է տեղադրվի հենց ճիշտ այն տեղում, որտեղ ձեռագրում հանդիպում է figure միջավայրը։ Բացի «h» (here) տառից, կարելի է տալ, օրինակ, նաև «t» (top) և «b» (bottom) տառերը։ Դրանցից առաջինն ասում է, թե նկարը պետք է միշտ տեղադրել (սահեցնել) էջի վերևում, իսկ երկրորդը՝ էջի ներքևում։ Ինչքան գիտեմ, լռելությամբ միացված է «t» պարամետրը (նկարները սահում են էջի վերին մասը)։ Օրինակ, հետևյալ երկու նկարներից առաջինում նկարը տեղադրելիս figure միջավայրին տրված է «h» տեղադրման պարամետրը, իսկ երկրորդում ոչինչ տված չէ։

Գրականության ցանկ և հղումներ

Փաստաթղթի կարևոր բաղադրիչներից է գեղեցիկ կառուցված գրականության ցանկը։ Բարեբախտաբար LaTeX համակարգի համար ստեղծվել է BibTeX գործիքը, որը հնարավորություն է տալիս ստանդարտ և, որ ավելի կարևոր է, պարզ գրառմամբ թվարկել աշխատանքում օգտագործված (կամ օգտագործվելիք) աղբյուրները։ Օրինակ, իմ մագիստրոսական աշխատանքի համար ես պատրաստել էի մի BibTeX ֆայլ (thesisbiblio.bib), որի պարունակության մի մասը այսպիսինն էր.
@article{hgsvz,
    author = "Grigoryan H. and Harutyunyan G. and Shoukourian S. and Vardanian V. and Zorian Y.",
    title = "Generic BIST Architecture for Testing of Content Addressable Memories",
    note = "IEEE International on-line testing symposium",
    year = "2011"
}

@article{art1,
    author="W. K. Al-Assadi and A. P. Jayasumana and Y. K. Malaiya",
    title="On fault modeling and testing of content-addressable Memories",
    journel="IEEE International Workshop on Memory Technology, Design and Testing",
    year=1994
}

@article{art2,
    author="J. Zhao and S. Irrinki and M. Puri and F. Lombardi",
    title="Testing SRAM-Based Content Addressable Memories",
    journal="IEEE Transactions on Computers",
    year=2000
} 
 
@article{art3,
    author="Zh. Xuemei and Y. Yizheng and Ch. Chunxu",
    title="Tests for Word Oriented Content Addressable Memories",
    journal="Asian Test Symposium",
    year=2002
}
Այստեղ BibTeX լեզվով նկարագրված են երեք հոդվածներ (@article), որոնց տրված են համապատասխանաբար hgsvz, art1, art2 և art3 նշիչները։ BibTeX ֆայլում թվարկված գրառումներին LaTeX ձեռագրում հղում են անուն հենց այս նշիչներով։ Հղումները կարող են լինել երկու տեսակի. \cite և \nocite մարոսներով։ Առաջինի օգտագործման դեպքում հղված տարրի համարն արտածվում է հղման կետում, իսկ երկրորդի դեպքում՝ ոչ։ \nocite մակրոսն օգտագործում եմ այն դեպքում, երբ ուզում եմ գրականության ցանկին տարր ավելացնել, բայց այդ տարրը չհիշատակել աշխատանքի տեքստում։ Օրինակ, իմ աշխատանքի առաջին գլխի առաջին նախադասությունը ձեռագրում ունի հետևյալ տեսքը, որտեղ \cite մակրոսով հղում եմ կատարել hgsvz նշիչն ունեցող հոդվածին։
Բովանդակությամբ հասցեավորվող հիշող սարքերը \cite{hgsvz} 
(\textsf{Content Addressable Memory} – \CAM) դրանք հիշող 
սարքերի մի հատուկ տեսակ են, որոնք օգտագործվում են որոնման 
մեծ արագություն պահանջող ապարատային կիրառություններում:
Փաստաթղթի այն տեղում, որտեղ ուզում եմ, որ հայտնվի գրականության ցանկը (սովորաբար գրականության ցանկը տեղադրում են վերջում), գրում եմ հետևյալ տողերը.
\bibliographystyle{plain}
\bibliography{thesisbiblio}  
Սրանցից առաջինն ասում է, որ փաստաթղթում պետք է տեղադրել plain ոճի (այդ ոճերի մասին առաայժմ չընդարձակավեմ) գրականության ցանկ, իսկ երկրորդը նշում է .bib ֆայլի անունը։
    Առաջին անգամ ձեռագիրը կոմպիլյացնելուց հետո .aux ֆայլում գրառումներ են կատարվում գրականության հղումների մասին։ Այնուհետև պետք է աշխատեցնել bibtex ծրագիրը՝ արգումենտում տալով .aux ֆայլը, որը գեներացնում է միայն ձեռագրում հիշատակված աղբյուրները պարունակող .bbl ֆայլը։ Եվ հետո նորից պետք է կոմպիլյացնել ձեռագիրը, որպեսզի փաստաթղթում ավելանա գրականության ցանկը, իսկ այն կետերում, որտեղ կատարվել են հղումները, ավելացվեն համապատասխան համարները։ Հրամանների տիպիկ հաջորդականությունը կարող է ունենալ հետևյալ տեսքը, որտեղ m0.tex-ն ձեռագրի ֆայլն է։
$ xelatex m0.tex
$ bibtex m0.aux
$ xelatex m0.tex

Ծրագրերի կոդի ներկայացումը

Երբեմն անհրաժեշտություն է առաջանում փաստաթղթում ունենալ մի որևէ ծրագրավորման լեզվով գրված տեքստ։ Ստանդարտ LaTeX-ի verbatim միջավայրը իր պարունակությունն արտածում է առանց ֆորմատավորման. այնպես, ինչպես գրված է ձեռագրում։ Բայց այդ, fancyvrb փաթեթը տրամադրում է Verbatim միջավայրը, որը հնարավորություն է տալիս անփոփոխ արտածվող տեքստն արտածել լրացուցիչ ատրիբուտներով, տողերի համարներ, շրջանակ, տառատեսակի փոփոխություն և այլն։

Ամփոփում

Առայժմ այսքանը աշխատանքների ձևավորման մասին։ Կրկնեմ նորից, որ ոճական տեսկետից ես ներկայացնում եմ միայն իմ սեփական կարծիքը։ LaTeX-ը թույլ է տալիս կամայական փոփոխություններ կատարել և վերջնական փաստաթուղթը հարմարեցնել նույնիսկ ամենաքմահաճ պահանջներին։

Thursday, March 13, 2014

Հայերեն LaTeX

Այս գրառման մեջ ուզում եմ մի քանի խոսքով պատմել այն մասին, թե ինչպես եմ ես LATEX համակարգի օգտագործմամբ պատրաստում հայերեն փաստաթղթեր։

Որպես LATEX իրականացում օգտագործում եմ xetex իրականացման xelatex ծրագիրը։ Այդ իրականացումը նախագծված է Unicode տեքստերի հետ աշխատելու համար և օգտագործում է համակարգում տեղադրված Unicode տառատեսակները։

LATEX-ն օգտագործում է երեք տեսքի տառատեսակներ՝ serif, sans և mono։ Լռելությամբ օգտագործվում են Computer Modern ընտանիքի տառերը, որոնցում չկան հայերենի այբուբենի տառերի պատկերները։ Համակարգում տեղադրված տառատեսակներն օգտագործելու համար նախ՝ հարկավոր է «ձեռագրի» ֆայլում հայտարարել, որ օգտագործվելու է fontspec փաթեթը։
\usepackage{fontspec}
Այնուհետև \setmainfont, \setsansfont և \setmonofont հրամաններով ընտրել serif, sans և mono տեսքերի համար օգտագործվող տառատեսակները։ Օրինակ, DejaVu ընտանիքի տառատեսակների հայերեն Unicode հատվածում կան հայերեն տառերի պատկերները։ Դա նշանակում է, որ հայերեն տեքստեր պատրաստելու համար կարելի է գրել հետևյալը.
\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
Եվ վերջ (բայց սա դեռ ամենը չէ՛)։ Հիմա արդեն կարելի է փաստաթղթի մարմնում գրել հայերեն Unicode տեքստ և xelatex ծրագրով այն բարեհաջող կթարգմանվի։ Ահա մի օրինակ.
\documentclass[12pt,a4paper,draft]{article}
\usepackage{fontspec}

\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}

\begin{document}
\chapter{Առակներ}

Ճանաչել իմաստութիւնն ու խրատը, իմանալ հանճարի խօսքերը, 
ընկալել խօսքի բարդ դարձուածքները, հասկանալ ճշմարիտ 
արդարութիւնը եւ ուղղել իրաւունքը՝ պարզամիտներին 
խորագիտութիւն եւ երիտասարդներին միտք ու հանճար տալու 
համար, որպէսզի, դրանք լսելով, իմաստունն աւելի իմաստուն 
լինի, իսկ հանճարեղը առաջնորդութիւն ստանայ, թափանցի 
առակների եւ խորին ասոյթների մէջ, իմաստունների ճառերի 
եւ նրանց այլաբանութիւնների մէջ։ 
\end{document}
Այս «ձեռագրի» համար ստացված PDF-ը ունի ստորև բերված նկարի տեսքը։
Հենց առաջին հայացքից երևում են մի քանի խնդիրներ. ա) LATEX-ի \chapter հրամանը տեքստի գլուխը սկսել է «Chapter» անգլերեն բառով, շատ լավ կլինի, որ գրվի հայերեն «Գլուխ» բառը, բ) հայերեն տեքստերի համար չկան տողադարձի կանոններ և երկար բառերը դուրս են եկել տեքստի համար նախատեսված սահմաններից, գ) քանի որ հայերեն տառերից շատերն ունեն տողից կախված մաս, դրանք լցնում են ստանդարտ միջտողային տարածությունը և տեքստը դառնում է աչքի համար նվազ հաճելի։

Առաջին խնդիրը կարելի է լուծել ձեռագրի հայտարարությունների մասում (\documentclass և \begin{document} արանքում) \renewcommand հրամանով վերասահմանելով latex փաստաթղթի տրամաբանական մասերի գլխագրերը.
\renewcommand{\chaptername}{Գլուխ} % book, report դասերի համար
\renewcommand{\contentsname}{Բովանդակություն}
\renewcommand{\figurename}{Նկար}
\renewcommand{\tablename}{Աղյուսակ}
\renewcommand{\appendixname}{Հավելված}
\renewcommand{\bibname}{Գրականություն} % book, report դասերի համար
%\renewcommand{\refname}{Գրականություն} % article դասի համար
\renewcommand{\indexname}{Առարկայական ցանկ}
Երկրորդ՝ տողադարձերի հետ կապված, խնդիրը լուծելու երկու եղանակ կա։ Կամ հայտարարությունների մասում ավելացնել \sloppy հրամանը, որը երկար բառը կտեղափոխի հաջորդ տողը և ամեն մի տողի միջբառային տարածությունները կավելացնի այնպես, որ տեքստը հավասարեցվի երկու կողմերից։ Ահա այսպես.
Այս եղանակին կարելի է դիմել էյն դեպքում, երբ պատրաստվող փաստաթուղթը գեղագիտական նշանակություն չի ունենալու այլ ծառայելու է միայն որպես տեղեկատվության փոխանցման միջոց։
    Երբ LATEX-ն օգտագործվում է, օրինակ, հրատարակության պատրաստվող գրքի տեքստի ձևավորման համար, իմ կարծիքով, ավելի ճիշտ է անցնել տեքստի վրայով և կատարել տողադարձերը։ Տողադարձը կատարելու համար ձեռագրում բառը պետք է վանկատել «\-» նիշով, իսկ LATEX-ի ֆորմատավորման ալգորիթմը այդ վանկատումից օգտվելու կկատարի տողադարձերը։ Ահա տեքստը, որտեղ որոշ բառերում նշված է տողադարձի տեղը.
Ճանաչել իմաստությունն ու խրատը, իմանալ հանճարի խոս\-քերը, 
ընկալել խոսքի բարդ դարձվածքները, հասկանալ ճշմա\-րիտ 
արդարությունը եւ ուղղել իրավունքը՝ պարզամիտներին 
խորագիտություն եւ երիտասարդներին միտք ու հանճար տա\-լու 
համար, որպեսզի, դրանք լսելով, իմաստունն ավելի իմաս\-տուն 
լինի, իսկ հանճարեղը առաջնորդություն ստանա, թա\-փան\-ցի 
առակների եւ խորին ասույթների մեջ, իմաստունների ճառերի 
և նրանց այլաբանությունների մեջ։ 
Իսկ այս տեքստից ստացվել է հետևյալ ֆորմատավորված փաստաթուղթը (ձեռագրից հեռացված է \sloppy հրամանը).
Ամեն ինչ, կարծես թե, լավ է։ Բայց տողադարձի ժամանակ LATEX-ն օգտագործում է սովորոկան hyphen գծիկը։ Հայերեն կետադրական կանոնները պահանջում են տողադարձի ժամանակ (և միայն տողադարձի ժամանակ) օգտագործել «֊» (ենթամնա) նիշը։ Դրա համար \setmainfont և \setsansfont հրամանները պետք է համալրել HyphenChar="058A ոչ պարտադիր արգումենտով.
\setmainfont[HyphenChar="058A]{GHEAMariam}
Ստորև բերված նկարներում տողադարձերը կատարված են ենթամնա նիշի օգտագործմամբ (ձախ նկարը) և սովորական hyphen նիշի օգտագործմամբ (աջ նկարը).
Եվ վերջապես, միջտողային տարածությունը մեծացնելու համար պետք է օգտագործել \linespread հրամանը՝ արգումենտում տալով ընդլայնման գործակիցը։
\linespread{1.2}
Հիմա արդեն վերջ։ LATEX ձեռագրում կատարելով վերը բերված փոփոխությունները՝ վստահորեն կարելի է պատրաստել բարձրորակ հայերեն փաստաթղթեր։

Sunday, February 9, 2014

Հայերեն TeX: «Քաջարի զինվոր Շվեյկի արկածները»

Ես արդեն ավելի հաճախ եմ հանդիպում այն հարցին, թե ինչպես plain TEX կամ LATEX համակարգերում գրել հայերեն տեքստեր։ Շնորհիվ Unicode նիշերի համակարգով աշպխատող XeTeX իրականացման, այդ երկու համակարգերում էլ հայերեն տեքստերի պատրաստումն արվում է շատ պարզ ու սովորական եղանակով։

Այս գրառման մեջ ես մի ամբողջական գիրք ձևավորելու օրինակով ցուց կտամ հայերեն տեքստ պատրաստելու ամբողջ ընթացքը։ Եվ այդ նպատակի համար օգտագործելու եմ վերջերս իմ թվայնացրած վեպերից մեկի՝ Յարոսլավ Հաշեկի «Քաջարի զինվոր Շվեյկի արկածները» գրքի տեքստը (ամբողջական տեքստը Լիտոպեդիա բանասիրության հանրագիրարանում)։ Ես այստեղ մանրամասնորեն չեմ ներկայացնի բոլոր մակրոսների վարքը, պարզապես մի քանի բառով ցույց կտամ դրանցից ամեն մեկի նպատակը։

OCR-ից հետո մաքրագիր տեքստը պահպանել եմ markdown ֆորմատով, որպեսզի հետագայում հնարավոր լինի այն թարգմանել այլ ֆորմատների։ Մասնավորապես՝ mediawiki ֆորմատը ստանալու համար օգտագործել եմ pandoc թարգմանիչը։ Բայց pandoc-ի ներդրված ֆորմատներում կա միայն LATEX-ի թարգմանիչ, և plain TEX-ի թարգմանելու համար ես գրեցի մի շատ պարզ սկրիպտ, որը տրված markdown տեքստից ստանում է իմ նախապատրաստած TEX մակրոսները պարունակող ֆորմատավորում։

Մինչև TEX լեզվով ֆորմատավորման մակրոսներ գրելը ես ուսումնասիրեցի գրքի տպագիր տեքստը (1973 թվականին տպագրված գրքի օրինակով) և առանձնացրեցի հետևյալ բաղադրիչները։

Տպատառերի տեսակներն ու չափերը.
  1. Հիմնական տեքստը տպագրված է «Գրքի սովորական» տառատեսակով։ Էջատակի նշումները և չափածո տեքստերը՝ նույն տառատեսակի ավելի մանր տարբերակով։ Տեքստում կան նաև հազվադեպ հանդիպող շղագիր հատվածներ։
  2. Մասերի ու գլուխների վերնագրերը տպագրված են Snas Serif (Գրոտեսկ) ինչ-որ տառատեսակով։

Էջերի տեսակները.
  1. Գրքի մասերը սկսող էջեր։ Դրանք չորսն են և տեղավորված են կենտ համարների վրա, այսինքն՝ բացված գրքի աջ էջին։ Այս տիպի էջերի հակառակ երեսը դատարկ է։
  2. Գրքի գլուխները սկսող էջեր։ Սրանք տպագիր գրքում սկսվում են նկարով, բայց քանի որ ես որոշել եմ գիրքը ձևավորել առանց նկարների, այս տիպի էջերի վերևի մասը դատարկ կթողնեմ։ (Միգուցե հետագայում կհավաքեմ նաև նկարներով տարբերակը։) Գլխի վերնագրը թավ տառերով է. առաջին տողում համարն է, երկրորդ տողում՝ գլխատառերով գրված վերնագիրը։ Համարն ու վերնագիրը հավասարեցված են դեպի ձախ։
  3. Սովորական տեքստի էջեր։ Գրքի տպագիր տարբերակում այս էջերը պարունակում են սովորական տեքստ, էջատակի նշումներ և էջի համարը՝ ներքևից կենտրոնում։ Որոշ էջերի վերին մասում կա նկար։ Էջատակի նշումները ամեն էջում սկսվում են 1-ից։ Տեքստում կան նաև աստղանիշով նշված ծագոթագրություններ, որոնց տեքստը բերված է գրքի վերջում՝ հղվելով աստղանիշը պարունակող էջին։ Տեքստում հանդիպում են նաև չափածո հատվածներ՝ էջի կենտրոնում ձախ հավասարեցումով։
* * *
Հիմա անցնեմ բուն նյութին։ Եվ այսպես, գրքի տեքստը կառուցելու համար օգտագործելու եմ Mariam և Grapalat տառատեսակները՝ հիմնական տեքստի 12pt չափով։ Ստորև բերված կոդում TEX լեզվի \font հրամանով սահմանված են գրքի մեջ օգտագործվող բոլոր տառատեսակները։ Այդ սահմանումներն օգտագործվելու են հաջորդիվ սահմանվող մակրոսներում։
% 10pt չափը էջատակի նշումների համար է
\font\armsmall="GHEAMariam:mapping=tex-text" at 10pt
% 10pt serif տառերը էջախորագրերի (колонтитул) համար են
\font\armsfsmall="GHEAGrapalat" at 10pt
% 11pt չափը չափածո տեքստերի համար է
\font\armpoem="GHEAMariam:mapping=tex-text" at 11pt
% 12pt հիմնական տեքստի տառերի չափն է
\font\armtext="GHEAMariam:mapping=tex-text" at 12pt
% 12pt հիմնական տեքստի շղագիր տառերը
\font\armtextit="GHEAMariam/I" at 12pt
% 12pt հիմնական տեքստի թավ տառերը
\font\armtextbf="GHEAMariam/B" at 12pt
% 24pt չափը գրքի մասերի վերնագրերի համար է
\font\armpart="GHEAMariam/B" at 24pt
% 14pt չափը գրքի գլուխների վերնագրերի համար է
\font\armchap="GHEAMariam/B" at 14pt
Հաջորդ քայլում \armtext տառատեսակները դարձնում եմ հիմնական.
\armtext
Ճիշտն ասած, միայն այսքանը բավական է հայերեն փաստաթուղթ պատրաստելու համար, բայց հետաքրքիրն առջևում է։

Ընդունված է տողերի միջև հեռավորությունը վերցնել հիմնական տառատեսակի չափից 20 տոկոսով ավել։ \baselineskip-ը որոշում է հենց այդ չափը.
\baselineskip=16pt
Քանի որ TEX համակարգում չկա հայերեն տեքստերի համար նախատեսված տողադարձի կանոններ, \tolerance պարամետրը որոշում է տողադարձը կատարելու «համբերության» չափը։ Այս պարամետրին տալով ավելի մեծ արժեք, համակարգին խնդրում ենք ավելի «ներողամիտ» լինել տեղադարձերի նկատմամբ և, հնարավորության դեպքում, բացատների ընդլայնման օգնությամբ կատարել հավասարեցում (ինչպես անում են շատ տեքստային խմբագրիչներ)։
\tolerance=4000
Անգլերեն տեքստերում ընդունված է վերջակետից («.» նիշից) հետո թողնել սովորականից ավելի մեծ բացատ։ Բայց հայերենում վերջակետը «.» նիշը միջակետն է և նրանից հետո երկար բացատ դնել պետք չէ։ \frenchspacing հրամանն անջատում է կետից հետո երկար բացատը։
\frenchspacing
Շղագրի և թավ տեքստի համար plain TEX համակարգի \it և \bf մակրոսներին տալիս եմ նոր իմաստ, որպեսզի դրանք օգտագործեն իմ սահմանած տառատեսակները։
\let\it=\armtextit
\let\bf=\armtextbf
Էջատակի նշումները գրելու համար plain TEX-ն ունի \footnote մակրոսը, որը ստանում է երկու արգումենտ՝ ինդեքսը և տեքստը։ Բայց ես որոշել եմ էջատակի նշումների ինդեքսները դարձնել ավտոմատ՝ ամեն մի գլխի համար սկսելով 1-ից, իսկ տեքստի համար սահմանել եմ 10pt չափի \armsmall տառատեսակը։ \def մակրոսով սահմանել եմ \note մակրոսը, որն իր մարմնում օգտագործում է \footnote-ն։
\newcount\notecount \notecount=0
\def\note#1{\global\advance\notecount by1%
  \footnote{${}^{\the\notecount}$}{{\armsmall #1}}}
\newcount մակրոսը սահմանում է նոր հաշվիչ՝ ամբողջ թիվ, որի արժեքը կարելի է փոխել \advance մակրոսով, իսկ արժեքը կարելի է փաստաթղթում արտածել \the մակրոսով։

Ծանոթագրությունների հետ աշխատելը մի քիչ ավելի բարդ է։ Պետք է ստեղծել մի ֆայլ, որի մեջ TEX կգրանցի տեքստում հանդիպող ծանոթագրությունները, և գրքի վերջից արդեն կարող ենք կցել այդ ֆայլի պարունակությունը։ Գրելու համար ֆայլ կարելի է ստեղծել \newwrite մակրոսով և ֆայլը բացել՝ \openout մակրոսով։
\newwrite\rem \openout\rem=\jobname.rem
\def\remark#1#2{${}^*$%
  \immediate\write\rem{\string\remitem{\the\pageno}{#1}{#2}\par}}
\def\remitem#1#2#3{Էջ~#1.~{\it #2} --- #3\par}
Սահմանված \remark մակրոսն իր կիրառման տեղում գրում է «*» նիշը, իսկ տեքստը, ընթացիկ էջի համարի հետ միասին, գրում է ֆայլում։ \jobname մակրոսը վերադարձնում է այն ֆայլի անունը, որը տրվել է TEX-ի կոմպիլյատորին։ Օրինակ, եթե կատարելու համար հավաքել եմ «xetex svejk.tex» հրամանը, ապա \jobname մակրոսը կվերադարձնի svejk անունը։ Յուրաքանչյուր մեկնաբանություն ֆորմատավորվում է \remitem մակրոսով, որը տպում է հղվող էջի համար, շղագրով տպում է ծանոթագրվող տերմինը և հետո՝ ծանոթագրությունը։

Ծանոթագրությունների նմանությամբ մի ֆայլ էլ պետք է պահել գրքի բովանդակության ցանկի համար, և մի մակրոս էլ՝ բովանդակության ամեն մի տողը ֆորմատավորելու համար։
\newwrite\toc \openout\toc=\jobname.toc
\def\tocitem#1#2{\line{#1\dotfill#2}}
Ինչպես նշեցի վերևում, գրքի մեջ լինելու են երեք տիպի էջեր. ա) մասերը սկսող էջեր, բ) գլուխները սկսող էջեր և գ) հիմնական տեքստը պարունակող էջեր։ Ահա սահմանել եմ \part մակրոսը, որի կիրառումը հերթական կենտ համարով էջի կենտրոնից քիչ վերև տպում է գրքի մասի վերնագիրը և դատարկ է թողնում հաջորդող զույգ համարով էջը։ Այս մակրոսը նաև վերասահմանում է \partname մակրոսը՝ նրան վերագրելով մասի վերնագիրը, որպեսզի հետ դա օգտագործվի էջախորագրերի համար։ Եվ, իհարկե, այս մակրոսը գրքի բովանդակության ֆայլում ավելացնում է վերնագիրն ու ընթացիկ էջի համարը։
\def\partname{}
\def\part #1:#2\par{%
  \begingroup\headline={}\footline={}\vfill\eject% դատարկել էջախորագրերը
  \ifodd\pageno\else\null\vfill\eject\fi% եթե ընթացիկ էջը զույգ է, թողնել դատարկ էջ
  \global\def\partname{#1։ #2}% պահել վերնագիրը էջախորագրերի համար
  \immediate\write\toc{\string\tocitem{#1։ #2}{\the\pageno}}% գրել բովանդակության տողը
  \null\vskip.4\vsize% էջի վերևում թողնել նրա 40%-ի չափով ազատ տեղ
  \centerline{{\armpart #1}}\vskip25pt\centerline{{\armpart #2}}% արտածել վերնագիրը
  \vfill\eject\null\vfill\eject% թողնել դատարկ էջ
  \endgroup}
Գրքի գլուխները սկսելու համար սահմանել եմ \chapter մակրոսը։ Բայց, քանի որ գլուխները սկսող էջերը տարբերվելու են տեքստի մյուս էջերից, նախ սահմանել եմ \ifchapterpage պայմանը։ \chapter մակրոսը զրոյացնում է էջատակի նշումների հաշվիչը, սկսում է նոր էջ, \chaptername մակրոսը սահմանում է որպես ընթացիկ գլխի վերնագիր, բովանդակության ֆայլում գրում է գլխի վերնագիրն ու էջի համարը, էջի վերևից բաց է թողնում 30 տոկոսը, տողի կենտրոնում արտածում է գլիխի համարը, իսկ մյուս տողում՝ վերնագիրը։
\newif\ifchapterpage \chapterpagefalse
\def\chaptername{}
\def\chapter #1. #2\par{\global\notecount=0%
  \vfill\eject\chapterpagetrue%
  \global\def\chaptername{\uppercase{#1. #2}}%
  \immediate\write\toc{\string\tocitem{\qquad#1. #2}{\the\pageno}}%
  \null\vskip.3\vsize\centerline{{\armchap #1}}\vskip14pt%
  \halign{\centerline{{\armchap ##}}\cr #2\cr}%
  \vskip25pt}
Գրքի որոշ գլուխներ բաժանված են հռոմեական թվերով համարակալված ենթագլուխների։ Դրանք նշելու համար սահմանել եմ \subchapter մակրոսը։
\def\subchapter#1{\vskip16pt\centerline{{\armchap #1}}\vskip16pt}
Հայերեն հրատարակության որոշ գլուղներում տեքստի տրամաբանական տրոհում է արված մի փոքր ավելի մեծ դատարկ տարածությամբ քան պարբերությունների միջև եղած տարածքն է։ Ես որոշեցի դրա փոխարեն օգտագործել երեք աստղանիշերից բաղկացած բաժանիչ նշանը։
\def\tristar{\vskip8pt\centerline{\armchap * \raise1ex\hbox{*} *}\vskip6pt}
Չափածո տեքստի համար սահմանել եմ \poem մակրոսը։
\long\def\poem#1{\begingroup\leftskip=.1\hsize\armpoem\let\\=\par
  \obeylines #1\par\endgroup}
Եվ վերջապես, էջախորագրերը։ Տեքստի զույգ համարներով էջերի վերջում արտածվում է ընթացիկ մասի վերնագիրը, իսկ կենտ համարներով էջերի վերևում՝ ընթացիկ գլխի վերնագիրը։ \headline-ն սահմանելիս \ifchapterpage պայմանի օգնությամբ գլուխները սկսող էջերի վրա էջախորագիր չեմ արտածում։
\headline{\ifchapterpage\global\chapterpagefalse\null%
    \else\centerline{{\armsfsmall\ifodd\pageno\chaptername\else\partname\fi}}\fi}
\footline{\hfil\folio\hfil}
Այսքանը՝ գրքի ձևավորման համար նախապատրաստած մակրոսների մասին։
* * *
Ամբողջական գիրքը ստանալու համար մնում է markdown ֆորմատից ստանալ TEX ֆորմատով տեքստերը, ապա ստեղծել, օրինակ, svejk.tex անունով մի ֆայլ, որի սկզբում սահմանված են վերը ներկայացված մակրոսները։

Այնուհետև՝ գրքի տիտղոսաթերթի ֆորմատավորման կոդն է․
\begingroup
\headline={}\footline={}
\null
\centerline{{\armchap Յարոսլավ Հաշեկ}}

\vskip.3\vsize
\centerline{{\armpart ՔԱՋԱՐԻ ԶԻՆՎՈՐ}}
\vskip14pt
\centerline{{\armpart ՇՎԵՅԿԻ ԱՐԿԱԾՆԵՐԸ}}
\vskip14pt
\centerline{{\armpart համաշխարհային}}
\vskip14pt
\centerline{{\armpart պատերազմի ժամանակ}}

\vskip2cm
\centerline{({\armtext թարգմ. Սուրեն Վահունի})}

\vfill
\centerline{{\armtext Երևան -- 1973, 2014}}
\eject\null\vfill\eject\null
\endgroup
Հաջորդում են \input հրամանով գրքի գլուխների բեռնման հրահանգները․
\input svejk-preface.tex

\part ՄԱՍՆ ԱՌԱՋԻՆ: ԹԻԿՈՒՆՔՈՒՄ

\input svejk-1-01.tex

\input svejk-1-02.tex

\input svejk-1-03.tex

\input svejk-1-04.tex

% ... և հաջորդները
Վերջում արտածվում են գրքի ֆորմատավորման ժամանակ կառուցված ծանոթագրություններն ու բովանդակության ցանկը․
\vfill\eject

\def\partname{}\def\chaptername{}
\armpoem

\immediate\closeout\rem
\vfill\eject
\centerline{{\armchap Ծանոթագրություններ}}
\vskip30pt
\input \jobname.rem


\immediate\closeout\toc
\vfill\eject
\centerline{{\armchap Բովանդակություն}}
\vskip30pt
\input \jobname.toc
Եվ վերջ։ Հիմնական գործն արված է։ Մնում է միայն անցնել տեքստի վրայով և շտկել առանձին թերությունները (տողադարձեր, պարբերություններ և այլն)։

Բոլոր ֆայլերը․ https://github.com/armenbadal/armlit/tree/master/jaroslav-hašek