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




syntax-highlighting pygments (2)

أحتاج إلى تسليط الضوء على شفرة المصدر في 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]


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

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


أخذ نصيحة نورمان للقلب ، لقد اخترقت معا الحل الذي يستخدم (مختلط) 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 ، ويمكن استنساخه من هناك.

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