זוהי הפקודה texexpand שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות החינמיות שלנו כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS.
תָכְנִית:
שֵׁם
texexpand - הרחב את פקודות \input ו- \include בקובץ TeX
תיאור
מנגנון תרגום כללי:
התוכנה הראשית latex2html קוראת ל-texexpand עם שם המסמך כדי להרחיב חלק מה-
של משפטי \input ו- \include שלו, הנקראים כאן גם 'מיזוג', ולכתוב רשימה של
סגנון רגיש, מחלקה, קלט או שמות קבצים. כאשר texexpand סיים, כל
כלול בקובץ אחד, TMP_foo. (בהנחה ש-foo.tex הוא שם המסמך שיש
לְתַרְגֵם).
בגרסה זו, texexpand מטפל בסביבות הבאות שעשויות לכלול קבצים /
גבולות מקטע: א) \begin{comment} ב) %begin{comment} ג) \begin{any} מוצג עם
ד) %begin{any} ה) \begin{verbatim} ו) \begin{latexonly} ז)
%begin{latexonly}
ה) - ז) למנוע מ-texexpand להרחיב קבצי קלט, אך תוכן הסביבה הולך
במלואו לתוך קובץ הפלט.
יחד עם כל מיזוג של \input וכו', ישנם סמני מה שנקראים %%%texexpand.
מלווה את הגבול.
כאשר latex2html קורא את קובץ הפלט, הוא משתמש בסמנים אלה כדי לכתוב כל חלק אל
קובץ נפרד, ולעבד אותם בהמשך.
מפורט טֶכנִי הערות:
1. %begin{latexonly} ו-%end{latexonly} חייבים להיות בשורה נפרדת. כל דבר בין
תגיות אלה (כולל התגיות) נמחקות.
2. \begin{latexonly} ו- \end{latexonly} חייבים להיות בשורה נפרדת. כל דבר בין
תגיות אלה (כולל התגיות) אינן מורחבות.
3. [%\]begin{"to exclusion"} ו-[%\]end{"to exclusion"} צריכים להיות בשורה נפרדת.
כל דבר בין תגיות אלה (כולל התגיות) נזרק.
4. \begin{verbatim/verbatim*} ו- \end{verbatim/verbatim*} צריכים להיות בשורה נפרדת.
כל דבר בין תגיות אלה (כולל התגיות) אינו מורחב.
5. היקף התגים הללו עשוי להשתרע על פני מספר קבצים. תגית הפתיחה עבור
latexonly עשוי להופיע ברמת include שונה מתגית הסגירה. תגית הפתיחה
עבור מילה במילה/"לא לכלול" חייב להופיע באותו קובץ כמו תגית הסגירה.
6. אזהרות מודפסות לאחר שהמסמך מנותח ונותרו תגיות פתוחות.
7. בסביבת "to exclusive"/מילה במילה, texexpand לא יזהה אף פקודה
למעט תג הסגירה המתאים. לא יכולים להיות מבנים מקוננים. זה
ההתנהגות זהה לזו של LaTeX.
8. ניתן לקנן את \begin{latexonly} ו-\end{latexonly}, בעוד ש-
ייתכן ש-%begin{latexonly},%end{latexonly} לא יהיו מקוננים.
9. תגית "%" לא יכולה לסגור תגית "\", ולהיפך.
10. כל \מסמךהפקודות (class|style), \usepackage, \input ו- \include חייבות להיות על
קו נפרד.
11. כל דבר מאחורי `%' שאינו קודם לו `\' נחשב כהערה, כלומר
מודפס אך לא מתפרש.
12. אם פקודה כלשהי המפורטת בסעיף 10. קודמת להופעה של `\verb' או `\latex' אז
זה לא מתפרש. זה קורס בשורות כאלה: בלה בלה \פוב+פו+
\input{bar} % bar לא ייטען!
13. חבילות המסופקות דרך \usepackage מטופלות באותו אופן כמו `options' ב-
\מסמך(מחלקה|סגנון), כלומר הם כלולים כאשר -auto_exclude כבוי, החבילה
לא נמצא ב-@dont_include *או* שהחבילה נמצאת ב-@do_include (חדש). הם נוספו ל-
קובץ style יחד עם האפשרויות שלהם אם הקובץ עצמו לא מוזג.
\documentclass[options]{class} מחפש כל option.clo,
הפונקציה \documentstyle[options]{style} מחפשת כל option.sty.
הפונקציה \usepackage[options]{packages} מחפשת כל package.sty.
14. כל ספריית texinputs מחפשת קבצי/סגנונות קלט. אם היא מסתיימת ב-`//', ה-
מתבצע חיפוש בכל עץ תת-הספריות.
15. \input / \include מיזוג הקובץ הנתון (אם נמצא תחת השם הנתון או עם .tex
סיומת) אם שם הבסיס שלו נמצא ב-@do_include או אם הוא לא נמצא ב-@dont_include או אם ה-
שם הקובץ הנתון אינו מסתיים ב-.sty/.clo/.cls כאשר -auto_exclude מוגדר.
הערות
מזהה את \documentclass, \documentstyle, \usepackage, \RequirePackage,
\begin{verbatim}...\end{verbatim}, %begin{latexonly}...%end{latexonly},
\begin{latexonly}...\end{latexonly}, \input, \include, \verb, \latex \endinput,
\end{document} \includecomment, \excludecomment \begin{"לא לכלול"}, \end{"לא לכלול"}
%begin{"לכלול"}, %end{"לכלול"}
השמיים הרים פרטים
הכללה וניתוח של קובץ. שגרה זו היא רקורסיבית, ראה גם
&process_input_include_file, &process_document_header, ו- &process_package_cmd.
שני דגלים גלובליים שולטים במדינות טקסס (texexpand).
o $active הוא true אם עלינו לפרש את השורות כדי להרחיב קבצים, לבדוק חבילות,
וכו '
o $mute הוא true אם עלינו למנוע מהשורות להיכנס לקובץ out.
יש לנו שלושה מצבים כלליים של texexpand:
1) לפרש את השורות ולהעביר אותן לקובץ היציאה. זהו המקרה הרגיל.
מקביל: $active true, $mute false
2) לפרש מינימלי ולדכא אותם
זה קורה בעת ניתוח בתוך סביבת תגובות, אשר
גם ישמור על הגוף שלו מ-LaTeX. => $active false, $mute true
3) לפרש את ה-minimal ולהעביר את השורות לקובץ out
זה בתוך סביבה מילה במילה או לטקס בלבד.
כמובן שיש לפרש לפחות את השורה כדי לקבוע את תגית הסגירה.
=> $active false, $mute false
כל סביבה עשויה להשתרע על פני מספר קבצי include. כל סביבה מלבד מילה במילה
ו-latexonly עשוי להיות בעל תגית פתיחה או סגירה ברמות קלט שונות.
וסביבות מילה במילה אינן ניתנות לקינון, כמו שקורה עם LaTeX. עלינו לפחות לנתח
סביבות מילה במילה/תגובות בסביבות latexonly, כדי לתפוס תגיות latexonly מזויפות.
סכמת העבודה: חמש פונקציות משפיעות על התנהגות texexpand. o &process_file פותח את
קובץ נתון ומנתח את החלק שאינו כולל הערות על מנת להגדיר את $active ו-$mute (ראה לעיל).
זה קורא ל-&interprete כדי לפרש את התוכן שאינו מהתגובות וממשיך עם ה-
השורה הבאה בקובץ שלו או מסתיימת אם &interprete זיהה את \end{document} או
קלט סופי.
o &interprete מטפל בכמה תגי LaTeX ביחס לשלושת המצבים הנשלטים על ידי
$active ו-$mute. בנוגע ל-\input|include, \מסמך(מחלקה|סגנון), ו
\(use|Require)ארזו את הפונקציות &process_input_include_file, &process_document_header,
ו-&process_package_cmd נקראים בהתאמה.
שלוש פונקציות אלו בודקות אם קבצי שם הקובץ או קבצי האפשרויות מופעלים או מושבתים עבור
מיזוג (דרך TEXE_DO_INCLUDE או TEXE_DONT_INCLUDE). כל קובץ שייכלל ייכלל
'מוזג' לתוך הקובץ הנוכחי, כלומר הפונקציה &process_file נקראת במקום זה
בזמן (באופן רקורסיבי). פעולה זו תעצור את הפרשנות בשורה הנוכחית בקובץ, התחל
עם הקובץ החדש לעיבוד וממשיך עם השורה הבאה ברגע שהקובץ החדש נשמר
מתפרש עד סופו.
עץ הקריאה (noweb+xy.sty יהיה שימושי כאן):
ראשי
|
v
+->קובץ_תהליך
| |
| ו
| interprete (ביחס לשורה הנוכחית, אחת משלושתן)
| | | |
| vvv
| קובץ_הקלט_הקובץ_הטקסט_הכותרת_של_המסמך
| | | |
| vvv
+----+-----------------------------+--------------------------+
באגים: o מכיוון שסביבת ה-latexonly אינה מנותחת, התוכן שלה עלול להכניס
סביבות שאינן מוכרות.
o תגית הסגירה של latexonly לא נמצאת אם היא מוסתרת בתוך קובץ קלט.
תגית סביבה אחת בכל שורה, עדיין!
אם הייתי צריך לתכנן מקרי בדיקה עבור החיה הזאת הייתי מתפרק מיד
לתוך ענן היגיון.
הערות:
אוקיי, עיצבתי מקרי בדיקה עבור זה. אנא עיינו ב'הרחבה' של מבחן הרגרסיה.
סוויטה במודול המפתחים של מאגר l2h.
תכונת o-unsegment: במקרה (נדיר) זה, המשתמש רוצה לתרגם קטע מפולח
מסמך לא בקטעים אלא כמכלול (למשל, לצורך בדיקה). אנו מאפשרים זאת על ידי זיהוי
הפקודה \segment ב-&interprete, מה שגורם לקובץ הסגמנט להיות מטופל כמו \input
אבל מאבדים את השורות הראשונות שלפני \startdocument (כולל), כפי שנשלט דרך
$segmentfile. כיצד לפלח מסמך, מומלץ לעיין בסעיף ``Document``
פילוח'' של מדריך LaTeX2HTML.
מערות
כלי זה מוגדר ונבנה באופן אוטומטי לעבודה על ההגדרה המקומית. אם זה
שינויי הגדרות (למשל, חלק מהפקודות החיצוניות הועברו), הסקריפט היה
הוגדר מחדש.
המחברים
מבוסס על texexpand מאת רוברט ת'או, מעבדת הבינה המלאכותית של MIT, כולל שינויים מאת
פרנץ וויג'יק[מוגן בדוא"ל]>
ניקוס דראקוס[מוגן בדוא"ל]>
סבסטיאן רהץ[מוגן בדוא"ל]>
מקסימיליאן אוט[מוגן בדוא"ל]>
מרטין בוייר
הרברט סוואן
ינס ליפמן
השתמש ב-texexpand באופן מקוון באמצעות שירותי onworks.net
