تسليط الضوء على التعليمات البرمجية المصدر في LaTeX




syntax-highlighting pygments (2)

TeX (مشهور) Turing-complete ، لكنني متأكد من أنك ستضطر إلى كتابة هذا التمديد بنفسك. توضح الوثائق بوضوح أن المؤلف الأصلي listings تهديمه في عام 2004 ، وأنه لم يتم تحديثه منذ عام 2006. لم يتم تصميم الحزمة لتجاوز تنسيق القيم الحرفية الرقمية ، ولكن قد تتمكن من تعديلها عن طريق تغيير تعريف \[email protected] . إذا لم ينجح ذلك ، فسيتعين عليك أن تفهم بالتفصيل كيفية عمل خيارات "نمط المعرف" ، وسيتعين عليك تكرار هذه الآلية للمعايير الرقمية الخاصة بك.

لا أفهم تماما لماذا أنت متردد في تقديم أداة خارجية إلى toolchain الخاص بك ، ولكن لأنك ، سيكون عليك القيام بعمل إضافي. بعد إلقاء نظرة على شفرة المصدر ، أتوقع أن يكون تعديل listings أمرًا ممكنًا ، ولكنني شخصياً سوف أختار أن أقوم بعملية المعالجة الأولية لـ LaTeX بدلاً من ذلك.

أحتاج إلى تسليط الضوء على شفرة المصدر في LaTeX. يبدو أن listings الحزمة هي أفضل خيار لمعظم حالات الاستخدام وبالنسبة لي كان ، حتى الآن.

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

listings أيضا لا يمكن التعامل مع المحددات التعسفي لسلاسل. خذ بعين الاعتبار الكود التالي لروبي:

s = %q!this is a string.!

هنا ! يمكن استبداله بأي محدد.

(لا يمكن أن تتعامل listings مع Unicode بشكل مزعج أيضًا ، ولكن هذه مشكلة أخرى).

من الناحية المثالية ، أنا أبحث عن امتداد listings التي تسمح لي بتقديم قواعد lexing أكثر تعقيدًا. لكن باستثناء ذلك ، أنا أيضا أبحث عن بدائل قابلة للتطبيق.

اقترحت مواضيع أخرى باستخدام Pygments التي يمكن أن تنتج ناتج LaTeX. هناك حتى حزمة - texments - لتسهيل الانتقال.

ومع ذلك ، هذا يفتقر إلى الميزات. على وجه الخصوص ، أنا مهتم بترقيم سطر listings ، ومراجع سطر الشفرة المصدر ، وإمكانية تضمين LaTeX في شفرة المصدر (خيارات texcl و mathescape في listings ).

على سبيل المثال ، في ما يلي مثال لنسق شفرة المصدر يحتوي على listings تعرض بعض الأشياء التي يجب أن يوفرها الاستبدال أيضًا:

["إضافة جانبية" تم تعديلها من Bit Hiddling Hacks]


أخذ نصيحة نورمان للقلب ، لقد اخترقت معا الحل الذي يستخدم (مختلط) Pygments لتسليط الضوء ودفعت أكبر عدد ممكن من الميزات دون انفجر ؛-)

لقد قمت أيضًا بإنشاء حزمة LateX ، بمجرد إصدار تصحيح Pygments الخاص بي في الإصدار 1.2 ...

تقديم سكت

minted عبارة عن حزمة تستخدم Pygments لتمييز بناء الجملة من الدرجة الأولى في LaTeX. على سبيل المثال ، يسمح بالإخراج التالي.

إليك ملفًا أدنى لإعادة إنتاج الشفرة المذكورة أعلاه (لاحظ أن أحرف Unicode قد تتطلب XeTeX)!

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}

\setsansfont{Calibri}
\setmonofont{Consolas}

\begin{document}
\renewcommand{\theFancyVerbLine}{
  \sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}}

\begin{minted}[mathescape,
               linenos,
               numbersep=5pt,
               gobble=2,
               frame=lines,
               framesep=2mm]{csharp}
  string title = "This is a Unicode π in the sky"
  /*
  Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
  of an $n$-sided regular polygon circumscribing a
  circle of diameter $d$.
  */
  const double pi = 3.1415926535
\end{minted}
\end{document}

يمكن أن يكون هذا typeet باستخدام الأمر التالي:

xelatex -shell-escape test.tex

(ولكن سكت أيضا يعمل مع latex و pdflatex ...)

يعمل minted.sty غرار texments.sty ولكنه يسمح بميزات إضافية.

كيف يمكن الحصول عليها

  • يتم minted ( معلومات عن الباقة )

  • يتم تضمين الوثائق بالطبع.

  • يتم الاحتفاظ بسكها الآن بواسطة جيفري بور. يتوفر إصدار التطوير ، بما في ذلك أحدث ملف .sty ، على .sty ، ويمكن استنساخه من هناك.

مرة أخرى ، وذلك بفضل نورمان لتحفيز لي لإنتاج هذه الحزمة.