اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
0 رای
15 بازدید

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

مفید بودن این ابزار زمانی است که به عنوان نمونه شما بخواهید چند فایل تک را با هم ادغام کنید.

برای ساده بودن، من محتویات فایل yazd-thesis.tex رو از بسته yazd-thesis می‌خواهم بخونم و اون رو در فایلی به نام mythesis.tex بنویسم.

1 پاسخ

0 رای
 
بهترین پاسخ

برای اینکه بتونیم محتویات فایلی رو بخونیم یا اینکه روی فایلی چیزی بنویسیم، اول باید عددی رو به اون اختصاص بدهیم. برای خواندن فایل از دستور \newread و برای نوشتن روی فایل از دستور \newwrite استفاده می‌کنیم:

\newread\maintexin
\newwrite\maintexout

حالا باید فایلی رو که می‌خواهیم بخونیم و فایلی رو که می‌خواهیم روش بنویسیم باز و در پایان ببندیم:

\immediate\openout\maintexout=mythesis
\immediate\openin\maintexin=yazd-thesis





\immediate\closein\maintexin
\immediate\closeout\maintexout

تک دستور بدوی \read رو برای خواندن هر خط فایلی که می‌خواهیم بخونیم، در اختیار ما قرار می‌ده. این دستور بدوی catcodeها رو تغییر نمی‌ده و اگر خودمون catcodeها رو تغییر ندهیم، ممکن است با خطای دستور تعریف نشده مواجه بشیم چون فایل yazd-thesis.tex ممکنه دستوراتی داشته باشه که خارج از اون تعریف نشده باشند.بنابراین باید catcodeها رو به ۱۲ تغییر بدهیم. خوشبختانه موتور حروف‌چین e-TeX دستور بدوی مشابهی به نام \readline در اختیار ما قرار می‌ده که catcodeها خودکار ۱۲ هستند. بنابراین برای راحتی کار ما از این دستور بدوی استفاده می‌کنیم. این دستور بدوی هر خط از فایلی رو که می‌خواهیم بخونیم می‌خونه و محتوای این خط رو در یک دستور ذخیره می‌کنه. بنابراین کاری که ما می‌خواهیم انجام بدهیم این هست که داخل یک حلقه بشیم و محتوای فایلی رو که می‌خواهیم بخونیم خط به خط بخونیم و در فایلی که می‌خواهیم بنویسیم.

\loop
  \unless\ifeof\maintexin
    \readline\maintexin to\maintexinline
    \immediate\write\maintexout{\maintexinline}%
\repeat

مقداری توضیح در مورد این دستورات لازم هست. دستور بدوی \unless رو دوباره موتور e-TeX در اختیار قرار می‌ده و logic دستور شرطی رو برعکس می‌کنه که من برای راحتی و اینکه مجبور نباشم از \else استفاده کنم از این دستور بدوی استفاده کردم.

دستور بدوی \ifeof رو موتور تک در اختیار ما قرار می‌ده و به ما این اجازه رو می‌ده که بفهمیم آیا پایان فایل هستیم یا نه.

بنابراین فایل تک ما تا این لحظه به شکل زیر هست:

\newread\maintexin
\newwrite\maintexout

\immediate\openout\maintexout=mythesis
\immediate\openin\maintexin=yazd-thesis

\loop
  \unless\ifeof\maintexin
    \readline\maintexin to\maintexinline
    \immediate\write\maintexout{\maintexinline}%
\repeat



\immediate\closein\maintexin
\immediate\closeout\maintexout

\end

این تقریبا همه کدی است که لازم داریم. اگر این کدها رو در فایلی به نام test.tex ذخیره کنیم و دستور زیر رو اجرا کنیم:

xetex test

فایلی به نام mythesis.tex درست می‌شه که تقریبا دقیقا کپی فایل yazd-thesis.tex هست. اما یک مشکل وجود داره و اون این هست که اگر فایل mythesis.tex رو باز کنیم، می‌بینیم که در پایان هر خط ^^M قرار داره. این همون کاراکتر پایان خط هست و اگر نمی‌خواهیم این کاراکتر در پایان خر خط وجود داشته باشه کافی است با استفده از دستور بدوی \endlinechar به تک بگوییک که آن را نادیده بگیرد.

بنابراین نسخه نهایی فایل تک ما بصورت زیر باید باشد:

\endlinechar=-1
\newread\maintexin
\newwrite\maintexout

\immediate\openout\maintexout=mythesis
\immediate\openin\maintexin=yazd-thesis

\loop
  \unless\ifeof\maintexin
    \readline\maintexin to\maintexinline
    \immediate\write\maintexout{\maintexinline}%
\repeat



\immediate\closein\maintexin
\immediate\closeout\maintexout

\end
پرسیدن سوال
سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

7.2k پرسش

6.6k پاسخ

23.6k نظر

9.5k کاربر

basket cart icon

محصولات مرتبط با LaTeX

در فروشگاه پارسی‌لاتک


basket cart icon

حمایت مالی از پارسی‌لاتک

برای تامین هزینه‌های نگه‌داری و به‌روزرسانی

محبوب‌ترین برچسب‌ها

رفع خطا جدول xepersian مراجع ریاضی‌نویسی bidi شکل فونت فهرست مطالب شماره‌گذاری منابع پانویس بیب‌تک parsilatex tikz تک‌لایو بیمر اسلاید زی‌پرشین پاورقی bibtex سربرگ نماد رسم شکل فرمول‌نویسی ارجاع‌دهی biditexmaker هدر ویرایشگر قالب beamer واژه‌نامه اندازه فونت texstudio عنوان فصل ماتریس اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول شماره صفحه bidipresentation حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف مکان شکل tikzpicture enumerate حروف‌چینی کد شماره فصل tabriz_thesis نمایه align زیرنویس شکل کادر itemize فهرست اشکال الگوریتم عدم اجرا listings نیم‌فاصله متن لاتین و فارسی بسته فاصله بین خطوط قالب پایان‌نامه hyperref فرمول نصب تک‌لایو فارسی‌تک شماره فرمول glossaries کپشن نمودار خروجی لاتک حروف‌چینی چندستونی فونت فارسی و انگلیسی ماکرونویسی extrafootnotefeatures biditools شماره پاورقی پیوست‌ سوال امتحانی فاصله‌گذاری فرمول چندضابطه‌ای tex subfigure biditufte-book header texmaker pdf خطا longtable تصویر شمارنده زیرنویس texlive2015 دیاگرام رسم نمودار شماره‌گذاری صفحات پایان نامه فهرست جداول میک‌تک texlive2016 شعر تنظیم جدول بولد آکولاد kashida تورفتگی texworks caption اندیس اعداد فارسی lollipop iust-thesis multicol فصل‌نویسی سوال چهارگزینه‌ای فاصله عمودی pgfplots xindy چپ‌چینی اوبونتو میکروسافت ورد قاب geometry xelatex texlive کاما fancyhdr وسط‌چینی تک لایو 2015 tcolorbox عنوان بخش شماره گذاری به‌روزرسانی بسته aimc46 صفر توخالی فرمول طولانی بیرون‌زدگی پوستر فاصله سطرها نوشتافت شکست خط tex-programming فونت اعداد قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس فلش جایابی تصویر فهرست تصاویر قالب کتاب پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل font محیط ریاضی رسم کادر bidipoem جداکننده جدول طولانی به‌روزرسانی شماره‌گذاری فرمول algorithm2e proof equation eps جدول افقی tabular عکس متن فارسی و انگلیسی پانویس چندستونی کمک مالی فاصله خطوط حروف‌چینی شعر فونت بولد زیرشکل minipage قلم پانویس پاراگرافی ltrfootnote پیوست computeautoilg فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان لاتکس baselineskip شماره قسمت قسمت عنوان جدول
...