سؤال

هل توجد صفائف في اللاتكس؟ لا أقصد الطريق إلى صفائف الأنواع. أعني المصفوفات كهيكل بيانات في LATEX/TEX كـ "لغة برمجة". أحتاج إلى تخزين عدد من Vbox-ES أو Hbox-ES في صفيف. قد يكون شيئًا مثل "مجموعة من وحدات الماكرو".

مزيد من التفاصيل: لدي بيئة يجب أن تكتب الأغاني. أحتاج إلى تخزين فقرات بعض الأغاني المقدمة كوسائط إلى Macro Songparagraph (لذلك لن أقوم بتكوينها ، فقط قم بتخزين تلك الفقرات). بما أنني لا أعرف عدد الفقرات التي يمكن أن تكون في أغنية واحدة ، فأنا بحاجة إلى مجموعة لهذا الغرض. عند إغلاق البيئة ، ستكون جميع الفقرات عبارة عن نوع من النوع - ولكن سيتم قياسها أولاً وسيتم حساب أفضل موضع لكل فقرة (على سبيل المثال ، يمكن وضع بعض الفقرات واحدة أخرى في عمودين لجعل الأغنية تبدو أكثر إحكاما وحفظ بعض المساحة).

كل الأفكار مرحب بها. من فضلك ، إذا كنت تعرف عن المصفوفات في LaTex ، فقم بنشر رابط إلى بعض الوثائق الأساسية أو البرنامج التعليمي أو مجرد أوامر الحالة الأساسية.

هل كانت مفيدة؟

المحلول

الدفع Arrayjob الذي ينفذ المصفوفات للملازم. من المسلم به ، لقد نظرت إليه فقط ، لذلك لا أعرف مدى فعالية ذلك. ولكن ، إذا لم يكن عليك أن تكتبها بنفسك ...

نصائح أخرى

هذه مجموعة كيف يمكن تنفيذها في LaTex:

\documentclass{article}
\begin{document}

\newcounter{mycounter}
\setcounter{mycounter}{1}

% ary is any prefix you want, it should not exist as a command.

\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{myfirstelement}
\stepcounter{mycounter}
\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{mysecondelement}

\csname ary1 \endcsname

or

\newcounter{index}
\setcounter{index}{2}

\csname ary\the\value{index} \endcsname

\end{document}

قم بتشغيل هذا من خلال LATEX (LATEX MYDOC.TEX أو PDFLATEX MYDOC.TEX) وترى الإخراج.

تفسير قصير: هذا ينشئ أمرين (مع NewCommand): ARY1 و ARY2. ال \expandafter مطلوب لأن newcommand لا ينبغي تحديد \csname لكن الأمر الذي تم إنشاؤه بواسطة \csname ... \endcsname. \expandafterيقفز على الرمز التالي ، في هذه الحالة تسلسل التحكم \newcommand وينفذ الأمر التالي قبل أن يرى تكس \newcommand. هذا يعني أن أول شيء في Newcommand Lines Tex هو \csname...\endcsname بناء ، Tex ينفذها ثم ينفذ \newcommand مع نتيجة \csname...\endcsname بناء. \csname foo\endcsname بالضبط مثل \foo, ، ولكن يمكنك استخدام أي حرف أو حتى مسافات في الأمر الذي تم إنشاؤه بواسطة \csname...\endcsname.

هذا ليس تافها. شاهد الكتاب العظيم "Tex by Topic" من Victor Eijkhout: http://eijkhout.net/texbytopic/texbytopic.html

Lutex لديه طاولات لوا ، والتي تعمم المصفوفات. إذا كان لديك LaTex قياسي ليس مهمًا بالنسبة لك ، ففكر في استخدام Latex مع LaTex. يمكنك بعد ذلك القيام بأشياء مثل:

\def\lookup#1{\directlua {
    local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]

Latex هو قشور بعض الشيء مع اللاتكس ، بسبب الحاجة إلى الهروب من جميع أنواع شخصيات لوا في رمز اللاتكس. السياق \startluacode ... \stopluacode وحدات الماكرو للتعامل مع تعريفات رمز LUA ، و \ctxlua بالنسبة لمكالمات Lua Code ، ولا يمكنني رؤية أي سبب لعدم تحديد شيء من هذا القبيل لـ LaTeX.

قد تعمل PGFKEYS و PGFFOR أيضًا. انهم جزء من PGF (تنسيق الرسومات المحمولة) ولكن يمكن استخدامها بشكل مستقل عن جميع الأشياء الرسومات.

للتوسع في إجابة باتريك ، الإجابة المختصرة هي "لا". ومع ذلك ، نظرًا لأنه يحتوي على توسع ماكرو ، يمكن برمجته للحصول على المصفوفات.

إليكم مثال آخر ، هذا مثال يستخدم Push and Pop لـ "المصفوفات". متى \type@pushcolour يسمى ، أنه يحفظ اللون الحالي على المكدس. \type@popcolour يأخذ تعريف اللون العلوي ، ويستخدمه:

\newcount\type@count
\def\type@pushcolour{%
  \xglobal\colorlet{foo\the\type@count}{.}%
\global\advance\type@count by1\relax}
\def\type@popcolour{%
  \global\advance\type@count by-1\relax%
\color{foo\the\type@count}}

(لقد قمت بتكييف هذا الرمز من مصدر حزمة Beamer)

يمكنك أيضًا النظر إلى شيء مثل حزمة Datatool أو نظام برمجة Expl3 ، ونوع بيانات "قائمة الخصائص".

ال ReadArray تتيح الحزمة أن يقوم أحد بإدخال بيانات منسقة في عناصر من صفيف ثنائي الأبعاد أو ثلاثي الأبعاد (أو صفيف سجل ملف 1-D).

\documentclass{standalone}
\usepackage{readarray}

\def\data{% the data
1 15 14 4
10 11 8 5
7 6 9 12
16 2 3 13
}
\readarray\data\dataA[4,4] %read the data to \dataA

\begin{document}
value at (2,1) = \dataA[2,1] %access a specific field
\end{document}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top