سؤال

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

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

Required result

listings أيضا لا يمكن التعامل مع المحددات التعسفية للسلاسل. النظر في رمز الياقوت الصحيح التالي:

s = %q!this is a string.!

هنا، ! يمكن استبداله تقريبًا أي محدد.

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

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

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

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

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

LaTeX listings example: Sideways addition "إضافة جانبية" تم تعديلها من Bit Twiddling Hacks

هل كانت مفيدة؟

المحلول

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

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

تقديم ميناء

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

fancy LaTeX example

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

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

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

نصائح أخرى

تكساس (مشهور) تكتمل ، لكنني متأكد تمامًا من أنك ستضطر إلى كتابة هذا الامتداد بنفسك. توضح الوثائق أن المؤلف الأصلي لـ listings قامت الأيتام في عام 2004 ، وأنه لم يتم تحديثه منذ عام 2006. لم تكن الحزمة مصممة لتجاوز تنسيق الحرفية الرقمية ، ولكن قد تتمكن من تعديلها عن طريق تغيير تعريف \lst@ProcessDigit. إذا لم ينجح ذلك ، فسيتعين عليك أن تفهم بالتفصيل كيفية عمل خيارات "نمط المعرف" ، وعليك أن تكرر هذه الآلية للحرفية الرقمية.

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

هذه هي حزمة تحول التعليمات البرمجية المصدر إلى Tex و LaTex مع تسليط الضوء على بناء الجملة. من الممكن إضافة تعريفات لغة البرمجة المخصصة بسهولة.

يبرز تسليط الضوء على 100 لغة برمجة ويشمل 50 سمات ملونة. إنه يتميز بإعادة تنسيق الكود والمسافة البادئة.

لم أستخدمها لمعرفة مدى نجاحها ، لكن شخص آخر أعرفه قال إنه يعمل بشكل جيد. إذا أتيحت لي الفرصة ، سأحاول ذلك بنفسي وأرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top