ল্যাটেক্স সমীকরণগুলিতে ইন-লাইন গণিতকে হাইলাইট করার জন্য রংধনু-ডিলিমিটার / রংধনু-ব্লকগুলি কীভাবে পাবেন


12

আমি লটেক্স সম্পাদনার জন্য অ্যাকটেক্সের সাথে স্পেসম্যাক্স ব্যবহার করছি এবং রংধনু- ডিলিমেটার এবং / অথবা রেইনবো-ব্লকগুলি ল্যাটেক্স গণিতের সমীকরণ হাইলাইট করতে চাই । দুর্ভাগ্যক্রমে এটি কেবল আংশিকভাবে কাজ করে, অর্থাত্ কিছু সমীকরণ হাইলাইট হয় এবং কিছুগুলি তা করে না:

উদাহরণ: রংধনু-ডিলিমিটারগুলি

উদাহরণস্বরূপ স্ক্রিনশটটিতে, ইন-লাইন আবদ্ধ গণিতটি $হাইলাইট হয় না যখন বাকী - ইন-লাইন গণিত সহ - আবদ্ধ থাকে \(...\)does

rainbow-blocksএটি আরও খারাপ হওয়ার সাথে সাথে এটি কখনও কখনও নথির এক জায়গায় কাজ করবে এবং কখনও কখনও সুযোগ ছাড়াই কাজ করবে না।

উদাহরণ: রংধনু-ব্লক

প্রশ্ন: কেন এমনটি ঘটে বা rainbow-blocksলটেক্সে ইন-লাইন গণিতের জন্য কীভাবে কাজ করবেন তা কি কেউ জানেন ? কোন কাজের বিকল্প আছে?


নেক্সটেক্সের লেটেক্স-মোডটি সিনট্যাক্স-সারণিতে বিশেষ সিনট্যাক্সের জন্য "$" সংজ্ঞায়িত করে বলে মনে হচ্ছে, সুতরাং সম্ভবত ফন্ট-লকের সিনট্যাকটিক ফন্টিফিকেশন কোনও কী-ওয়ার্ড-ভিত্তিক ফন্টিফিকেশনকে ছাড়িয়ে যাচ্ছে।
কিরিল

highlight-parenthesesফন্ট লকটির পরিবর্তে ওভারলেগুলি ব্যবহার করে এবং ওভারলে ফাংশনটির সময়কালের জন্য অস্থায়ী সিনট্যাক্স-টেবিল ব্যবহার করা খুব সহজ জিনিস হবে। github.com/nschum/hightlight-pareheses.el সেই লাইব্রেরিতে যে ফাংশনটি পরিবর্তন করা দরকার তা হ'ল hl-paren-highlight: (let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . . দুর্ভাগ্যক্রমে, এটি আপনার নির্দিষ্ট করা একটির চেয়ে অন্য একটি গ্রন্থাগার - আমি কীভাবে ঠিক করতে জানি না rainbow-delimiters- সম্ভবত আপনি পারতেন রক্ষণকারীর সাথে গিথুবকে একটি সমস্যা খুলুন।
আইনজীবি

(with-silent-modifications (remove-text-properties (region-beginning) (region-end) '(face nil font-lock-face nil)) (add-text-properties (region-beginning) (region-end) '(face rainbow-delimiters-depth-1-face)))এটি ব্যবহার করে এম্বেড করা সূত্রের মধ্যে ফন্টিফিকেশনটি প্রতিস্থাপন করা সম্ভব। তবে এটি প্রায় কোনও পরামর্শে কাজ করে না rainbow-delimiters-propertize-delimiter। এটি ইঙ্গিত দেয় যে latex-modeফন্টিফিকেশন মাধ্যমে ফন্টিফিকেশন মাধ্যমে সঞ্চালিত হয় rainbow-delimiters-mode
টোবিয়াস

রংধনু-ডিলিমিটারগুলি সরাসরি জিট-লক ব্যবহার করে। সম্ভবত, সিনট্যাকটিক ফন্টিফিকেশনটি জিট-লক ব্যবহার করে না এবং আমরা এর কারণে একটি সময়সীমার সমস্যা পাই?
টোবিয়াস

উত্তর:


2

নীচের থেকে আরও একটি মন্তব্য মত

  1. এটি সমস্যার সামান্য অংশে সমাধান করে ( rainbow-delimiters-mode)
  2. এটি পুরোপুরি পরীক্ষা করা হয়নি (কেবলমাত্র একটি ল্যাটেক্স-ফাইল দিয়ে)
  3. এটি কেন কাজ করে তা আমি পুরোপুরি বুঝতে পারি না ( font-lock-modeসত্যিই বেশ জটিল একটি যন্ত্র)

প্রথমে এর সমাধান rainbow-delimiters-mode:

আমরা টেক্সট সম্পত্তি প্রতিস্থাপন font-lock-faceদ্বারা faceমধ্যে rainbow-delimiters-propertize-delimiterএবং rainbow-delimiters-unpropertize-delimiter। যেহেতু defsubstপ্যাকেজের পরিবর্তে defunআমরা চাকরী করতে পারি না defaliasতবে তাদের নিজস্ব ফাংশনগুলি সংশোধন করতে হবে (যতদূর আমি এটি বুঝতে পারি - দয়া করে আমি এই বিষয়ে ভুল হলে মন্তব্য করুন)।

পরিবর্তিত ফাংশনগুলি হ'ল:

(defsubst rainbow-delimiters-propertize-delimiter (loc depth)
  "Highlight a single delimiter at LOC according to DEPTH.

LOC is the location of the character to add text properties to.
DEPTH is the nested depth at LOC, which determines the face to use.

Sets text properties:
`font-lock-face' to the appropriate delimiter face.
`rear-nonsticky' to prevent color from bleeding into subsequent characters typed by the user."
  (with-silent-modifications
    (let ((delim-face (if (<= depth 0)
                          'rainbow-delimiters-unmatched-face
                        (rainbow-delimiters-depth-face depth))))
      ;; (when (eq depth -1) (message "Unmatched delimiter at char %s." loc))
      (add-text-properties loc (1+ loc)
               ;; 2015-05-24: Changed font-lock-face to face to enable rainbow after syntax fontification in latex-mode
               ;; (see http://emacs.stackexchange.com/questions/4260/how-to-get-rainbow-delimiters-rainbow-blocks-to-highlight-in-line-math-in-latex)
                           `(face ,delim-face
                             rear-nonsticky t)))))


(defsubst rainbow-delimiters-unpropertize-delimiter (loc)
  "Remove text properties set by rainbow-delimiters mode from char at LOC."
  (with-silent-modifications
    (remove-text-properties loc (1+ loc)
                ;; 2015-05-24: See corresponding line in `rainbow-delimiters-propertize-delimiter'.
                            '(face nil
                              rear-nonsticky nil))))

এখন যুক্তি:

D -ডেলিমিটারগুলির মধ্যে এম্বেড করা সূত্রগুলি সিনট্যাক্স হ'ল ফন্ট-লক-মোড দ্বারা (যেমন ইতিমধ্যে ক্যারিল চিহ্নিত করেছেন) by এই ফন্টিফিকেশনটির নিবন্ধকরণটি সাধারণ দেখায় (পরিবর্তনশীল font-lock-syntactic-face-functionএবং কার্যকারিতা দেখুন font-latex-syntactic-face-function)। তবে describe-charএকটি এম্বেড থাকা সূত্রের চরিত্রগুলিতে দেখায় যে সিনট্যাক্টিক ফন্টিফিকেশন face-প্রোপারটির পরিবর্তে -প্রোপার্টি ব্যবহার করে font-lock-face

নিম্নলিখিতটি অনুমানমূলক যেহেতু আমি ফন্ট-লক যন্ত্রটি সম্পূর্ণ জটিল না যা সম্পূর্ণ জটিল।

মনে হয় যে এর faceচেয়ে শক্তিশালী font-lock-face। রেইনবো-ডিলিমিটার ব্যবহার করে font-lock-faceযা faceসিনট্যাক্টিক ফন্টিফিকেশন দ্বারা আধিপত্য রয়েছে। তবুও, আমাদের সুবিধা রয়েছে যে সিনট্যাকটিক ফন্টিফিকেশনটি অনুসন্ধান (কীওয়ার্ড) ভিত্তিক ফন্টিফিকেশন আগে আসে যা ফলস্বরূপ জিট-লক ব্যবহার করে (এর তথ্যের পৃষ্ঠাগুলি দেখুন font-lock-mode)।

এটি আমাকে এই সিদ্ধান্তে পৌঁছে দেয় যে আমরা যদি faceএর rainbow-delimitersপরিবর্তে ব্যবহার করি তবে সমস্যাটি সমাধান হয়ে গেছে font-lock-face। এবং এখানে আমি সম্পূর্ণ পরিণতি জানি না। তবে, যেহেতু rainbow-delimitersএছাড়াও jit-lockসরাসরি ব্যবহার করে (এবং এর মাধ্যমে নয় font-lock-mode) আমরা যাইহোক নড়বড়ে মেঝেতে দাঁড়িয়ে আছি।

দ্রষ্টব্য, এর সাথে আমার ইতিমধ্যে কিছু যোগাযোগ ছিল rainbow-delimiters( /programming/19800243/hightlight-first-mismatching-paren/20022030#20022030 দেখুন ) তবে এর সাথে নেই rainbow-blocks। কারণ আমি মনোনিবেশ করতে বেছে নিয়েছি এমন সময়সীমা সীমিত rainbow-delimiters। হতে পারে, আপনি- rainbow-blocksসমস্যাটি একইভাবে সমাধান করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.