تسليط الضوء على التعليمات البرمجية المصدر في 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
، ويمكن استنساخه من هناك.
مرة أخرى ، وذلك بفضل نورمان لتحفيز لي لإنتاج هذه الحزمة.