Latex3: رسائل فئات يُدعى أنها رسائل "حزمة"

تم إنشاؤها على ٢٦ أبريل ٢٠٢١  ·  14تعليقات  ·  مصدر: latex3/latex3

كما هو موضح في MCE التالية ، يُدعى أن رسائل الفئات هي رسائل "حزمة":

\begin{filecontents*}[overwrite]{myclass.cls}
\ProvidesExplClass
  {myclass}
  {2021/04/26}
  {0.1}
  {
    My Nice Class
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { article }
%
\msg_new:nnn {myclass} {Foo} {Bar}
\msg_warning:nn {myclass} {Foo}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
\begin{document}
\end{document}

يكتب:

حزمة myclass تحذير: شريط

ألا يجب أن تكون الوحدة النمطية l3msg قادرة على التمييز بين \ProvidesExplClass و \ProvidesExplPackage ؟

documentation feature-request

ال 14 كومينتر

إنه كذلك ، ولكن عليك إخباره صراحةً عن طريق إضافة نوع ملفك إلى \g_msg_module_type_prop :

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

واسمه اختياريًا \g_msg_module_name_prop :

\prop_gput:Nnn \g_msg_module_name_prop { myclass } { My~Nice~Class }

ثم تحصل على تحذير مثل:

Class My Nice Class Warning: Bar

ربما يمكن لـ l3msg ملء النوع تلقائيًا إذا تم استخدام \ProvidesExpl<Thing> ...


ميغاواط:

\begin{filecontents*}[overwrite]{myclass.cls}
\ProvidesExplClass
  {myclass}
  {2021/04/26}
  {0.1}
  {
    My Nice Class
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { article }
%
\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }
\prop_gput:Nnn \g_msg_module_name_prop { myclass } { My~Nice~Class }
\msg_new:nnn {myclass} {Foo} {Bar}
\msg_warning:nn {myclass} {Foo}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
\begin{document}
\end{document}

ربما يمكن أن يملأ l3msg تلقائيًا إذا تم استخدام \ProvidesExpl<Thing> ...

سيكون جميلا! :ابتسامة:

لا توجد علاقة خاصة بين \ProvidesExpl... وبادئة الوحدة النمطية المستخدمة في الكود: أعتقد أنه مجرد شيء يتعين على المرء القيام به يدويًا.

كان هذا قبل أن تستخدم الفصول الدراسية بالكامل مشكلة بناء الجملة expl3 - لقد كانت فكرة لا تعمل تمامًا. (لا تزال الفصول الدراسية بحاجة إلى مزيد من العمل ، لكن لا ينبغي أن تقوم بالبرمجة ، التي تنتمي إلى الحزم.)

لا توجد علاقة خاصة بين \ProvidesExpl... وبادئة الوحدة النمطية المستخدمة في الكود: أعتقد أنه مجرد شيء يتعين على المرء القيام به يدويًا.

لا ارى لماذا.

كان هذا قبل أن تستخدم الفصول الدراسية بالكامل مشكلة بناء الجملة expl3 - لقد كانت فكرة لا تعمل تمامًا. (لا تزال الفصول الدراسية بحاجة إلى مزيد من العمل ، لكن لا ينبغي أن تقوم بالبرمجة ، التي تنتمي إلى الحزم.)

لا أفهم ما هي الفكرة التي لا تعمل تمامًا.

لا توجد علاقة خاصة بين \ProvidesExpl... وبادئة الوحدة النمطية المستخدمة في الكود: أعتقد أنه مجرد شيء يتعين على المرء القيام به يدويًا.

لا ارى لماذا.

في \ProvidesExplClass لا يجب أن يتطابق اسم الفصل مع البادئة المستخدمة في الكود. أو يمكن استخدام الكود بواسطة كل من الحزمة والفئة (أفعل ذلك بمصطلحات LaTeX2e في achemso ) ، لذلك لن يكون الرابط ظاهرًا.

كان هذا قبل أن تستخدم الفصول الدراسية بالكامل مشكلة بناء الجملة expl3 - لقد كانت فكرة لا تعمل تمامًا. (لا تزال الفصول الدراسية بحاجة إلى مزيد من العمل ، لكن لا ينبغي أن تقوم بالبرمجة ، التي تنتمي إلى الحزم.)

لا أفهم ما هي الفكرة التي لا تعمل تمامًا.

يجب أن تدور الفصول الدراسية حقًا حول التنسيق / النمط / وما إلى ذلك ، وليس الوظائف. يجب إضافة الأخيرة بواسطة الحزم ، والتي ستكون بشكل مثالي مستقلة عن الفئات التي يتم استخدامها معها. الوضع الحالي ليس مثاليًا ، وقد تم توفير مجموعة \ProvidesExpl... في وقت مبكر لتعكس ببساطة \Provides... من نواة LaTeX2e. ولكن مع الإدراك المتأخر ، فإن هذا هو النهج الخاطئ: يجب أن تستخدم الحزم رمز expl3 ، ويجب أن تستخدم _classes_ واجهات على مستوى المستند أو التصميم والتي _might_ يمكن تنفيذها في expl3 .

يجب أن تدور الفصول الدراسية حقًا حول التنسيق / النمط / وما إلى ذلك ، وليس الوظائف.

يجب أن يُدرج الفصل الذي أعمل عليه حاليًا رسمًا في الصفحة الأولى من المستند ... إذا تم العثور على هذا الرسم وإلا يجب أن يعرض تحذيرًا (بالإضافة إلى تحذير في ملف السجل). هل هو التصميم أم الوظيفة؟

لقد أصلحت المشكلة المطروحة عن طريق نقل وثائق \g_msg_module_name_prop و \g_msg_module_type_prop في وثائق l3msg .

dbitouze أثناء طرح سؤال جيد حول التصميم مقابل الكود ، لا أعتقد أن هذه المشكلة هي المكان المناسب. ربما يكون من المنطقي أن تنشر سؤالاً حول تبادل المكدس ويطلب من أحد أعضاء الفريق الإجابة هناك؟ أو سؤال في القائمة البريدية LaTeX-L. لا اعرف حقا.

تم .

لقد أصلحت المشكلة المطروحة عن طريق نقل وثائق \g_msg_module_name_prop و \g_msg_module_type_prop في وثائق l3msg .

AFAICS ، MCE في OP لا يزال يكتب:

حزمة myclass تحذير: شريط

حتى مع pdflatex-dev . هذا هو الإخراج في المحطة (بالإضافة إلى قائمة الملفات):

This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=pdflatex-dev)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2021-12-01> pre-release-0 (develop 2021-6-6 branch)
L3 programming layer <2021-06-01>

LaTeX Warning: Writing or overwriting file `./myclass.cls'.


(./myclass.cls
Document Class: myclass 2021/04/26 v0.1  My Nice Class 
(/usr/local/texlive/2021/texmf-dist/tex/latex-dev/base/article.cls
Document Class: article 2021/02/12 v1.4n Standard LaTeX document class
(/usr/local/texlive/2021/texmf-dist/tex/latex-dev/base/size10.clo))

Package myclass Warning: Bar

) (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def)
 (./test.aux) (./test.aux)

 *File List*
 myclass.cls    2021/04/26 v0.1  My Nice Class 
 article.cls    2021/02/12 v1.4n Standard LaTeX document class
  size10.clo    2021/02/12 v1.4n Standard LaTeX file (size option)
l3backend-pdftex.def    2021-05-07 L3 backend support: PDF output (pdfTeX)
 ***********

 )
No pages of output.
Transcript written on test.log.

dbitouze هل قمت بتطبيق

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

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

dbitouze هل قمت بتطبيق

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

همهمة ، لا ، آسف لسوء الفهم.

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

سيء للغاية: اعتقدت (وآمل) أن الإصلاح لم يعد يتطلب أي إجراء من مؤلف الفصل: ابتسم: هل تم التخطيط له؟

كما أوضح josephwright ، لا يوجد اتصال يمكن اكتشافه تلقائيًا بين البادئة المستخدمة \ClassWarning ثم إعطاء الاسم ، الآن فقط عليك تحديد الاتصال مرة واحدة فقط وفي الماضي كان عليك القيام بذلك في كل مكالمة باستخدام \Class... القيادة وإعطاء اسم الفئة إلى ذلك.

لذا فإن استخدام "myclass" هو مجرد سلسلة تم تمريرها إلى نظام msg وبينما قد نعتقد نحن البشر أن رؤية "class" في الاسم تعني أنها فئة ، لا يمكن لنظام msg إجراء هذا الاستنتاج (وقد يكون خطأ على أي حال). هذا هو سبب الحاجة إلى اتخاذ إجراء من مؤلف الفصل وكان هناك حاجة إليه في الماضي حيث كتبت \ClassWarning{<classname>} . حقيقة أن اسم الفئة معروف بـ \ProvidesExplClass لا يعني أن السلسلة المستخدمة في msg تستخدم هذا الاسم. على سبيل المثال ، معظم أسماء الحزم طويلة ولكن البادئات التي أستخدمها قصيرة إلى حد ما. لذلك عليك أن تخبر نظام الرسائل أن سلسلة معينة هي فئة.

يمكننا أن نتتبع بشكل معقول عندما يتم استدعاء \ ProvidesExplClass و
\ g_msg_module_type_prop لم يتم تعديله بين بداية ونهاية ملف
ملف (ربما تحذر فقط إذا تم استدعاء \ msg_new: nnnn).

لا يبدو الأمر قبيحًا جدًا ، ويمكن أن يتجنب هذا الخطأ السهل.

يمكننا ذلك ، لكنها تكلفة وقت تشغيل لكل مستند بينما الخطأ هو خطأ فئة يتجلى مع إخراج خاطئ (ولكن غير ضار) ويمكن تصحيحه بسهولة مرة واحدة وإلى الأبد. لذا فأنا لا أؤيد حقًا إبطاء المعالجة باستخدام فحوصات وقت التشغيل. إذا كان يجب أن يذهب على الإطلاق إلى خيار الاختيار. أعلم أن تكاليف وقت التشغيل هذه صغيرة في حد ذاتها ولكنها تزيد من العبء.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات