تمييز رمز المصدر في اللاتكس
-
21-09-2019 - |
سؤال
أحتاج إلى تسليط الضوء على التعليمات البرمجية المصدر في LaTex. حزمة listings
يبدو أن الخيار الأفضل لمعظم حالات الاستخدام ، وكان الأمر كذلك بالنسبة لي ، حتى الآن.
ومع ذلك ، أنا الآن بحاجة إلى مزيد من المرونة. بشكل عام ، ما أبحث عنه هو حقيقة ليكسر. على وجه الخصوص ، أحتاج (لتعريف اللغة الخاصة) لتحديد أنماط الأرقام (وتمييزها!). listings
لا يسمح بتمييز الأرقام في الكود. ومع ذلك ، أحتاج إلى إنتاج شيء مثل هذا:
listings
أيضا لا يمكن التعامل مع المحددات التعسفية للسلاسل. النظر في رمز الياقوت الصحيح التالي:
s = %q!this is a string.!
هنا، !
يمكن استبداله تقريبًا أي محدد.
(الذي - التي listings
لا يمكن التعامل مع Unicode هو أيضًا محير تمامًا ، لكن هذه مشكلة أخرى.)
من الناحية المثالية ، أبحث عن امتداد listings
هذا يسمح لي بتوفير قواعد ليكسينغ أكثر تعقيدًا. لكن باستثناء ذلك ، أنا أبحث أيضًا عن بدائل قابلة للحياة.
مواضيع أخرى اقترحت استخدام القزور والتي يمكن أن تنتج إخراج اللاتكس. حتى أن هناك حزمة - texments
- لتخفيف الانتقال.
ومع ذلك ، فإن هذا يفتقر إلى الميزات. على وجه الخصوص ، أنا مهتم listings
-ترقيم سطر Style ، مراجع سطر الكود المصدر ، وإمكانية تضمين اللاتكس في التعليمات البرمجية المصدر (الخيارات texcl
و mathescape
في listings
).
على سبيل المثال ، إليك نوعًا من أنواع الكود المصدر listings
مما يدل على بعض الأشياء التي يجب أن يوفرها البديل أيضًا:
"إضافة جانبية" تم تعديلها من Bit Twiddling Hacks
المحلول
أخذ نصيحة نورمان إلى القلب ، لقد اخترقت حلًا مستخدمًا (أ مرمم) Pygments لتسليط الضوء ودفع أكبر عدد ممكن من الميزات دون انفجار ؛-)
لقد قمت أيضًا بإنشاء حزمة LaTeX ، بمجرد إصدار تصحيح Pygments الخاص بي الإصدار 1.2 …
تقديم ميناء
ميناء هي حزمة تستخدم 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}
يمكن أن يكون هذا نوعًا ما باستخدام الأمر التالي:
xelatex -shell-escape test.tex
(لكن ميناء يعمل أيضا مع latex
و pdflatex
…)
minted.sty
يعمل مماثلة ل texments.sty
ولكن يسمح بميزات إضافية.
كيف يمكن الحصول عليها
ميناء هو المدرجة على CTAN (معلومات الحزمة)
توثيق هو بالطبع مدرجة.
ميناء يتم الحفاظ عليه الآن من قبل جيفري بور. نسخة التطوير ، بما في ذلك أحدث
.sty
ملف, ، متاح في github.com/gpoore/minted, ، ويمكن استنساخ من هناك.
مرة أخرى ، بفضل نورمان على تحفيزني لإنتاج هذه الحزمة.
نصائح أخرى
تكساس (مشهور) تكتمل ، لكنني متأكد تمامًا من أنك ستضطر إلى كتابة هذا الامتداد بنفسك. توضح الوثائق أن المؤلف الأصلي لـ listings
قامت الأيتام في عام 2004 ، وأنه لم يتم تحديثه منذ عام 2006. لم تكن الحزمة مصممة لتجاوز تنسيق الحرفية الرقمية ، ولكن قد تتمكن من تعديلها عن طريق تغيير تعريف \lst@ProcessDigit
. إذا لم ينجح ذلك ، فسيتعين عليك أن تفهم بالتفصيل كيفية عمل خيارات "نمط المعرف" ، وعليك أن تكرر هذه الآلية للحرفية الرقمية.
لا أفهم تمامًا سبب تردبك في تقديم أداة خارجية في مجموعة الأدوات الخاصة بك ، ولكن لأنك ، يجب عليك القيام بعمل إضافي. بعد إلقاء نظرة على الكود المصدر ، أتوقع هذا التعديل listings
يجب أن يكون ذلك ممكنًا ، لكنني شخصياً سأختار معالجة اللاتكس بدلاً من ذلك.
هذه هي حزمة تحول التعليمات البرمجية المصدر إلى Tex و LaTex مع تسليط الضوء على بناء الجملة. من الممكن إضافة تعريفات لغة البرمجة المخصصة بسهولة.
يبرز تسليط الضوء على 100 لغة برمجة ويشمل 50 سمات ملونة. إنه يتميز بإعادة تنسيق الكود والمسافة البادئة.
لم أستخدمها لمعرفة مدى نجاحها ، لكن شخص آخر أعرفه قال إنه يعمل بشكل جيد. إذا أتيحت لي الفرصة ، سأحاول ذلك بنفسي وأرى.