ইউনিকোড অক্ষরগুলির সাথে রেখার উচ্চতা


23

কিছু ইউনিকোড অক্ষর তাদের প্রদর্শিত লাইনটি বেশ বড় আকার ধারণ করে। উদাহরণস্বরূপ, একটি গুরুতর উচ্চারণ "̀" এর উপরে এবং নীচে প্রায় 2.5 লাইনের স্থান যুক্ত করে। এই চরিত্রের কারণ হিসাবে সৃষ্ট অন্যান্য অক্ষরগুলির মধ্যে গ্রীক অক্ষর "ϕ" (ফাই) বা উপসেট-সমান "⫅" অন্তর্ভুক্ত রয়েছে। অন্যান্য অক্ষর যেমন মানচিত্র-থেকে "⤇" উভয় পাশের প্রায় 0.5 টি লাইন যুক্ত করে।

julia-mode.elLaTeX প্রতিস্থাপনের জন্য এমন সংখ্যক অক্ষর রয়েছে এমন উত্সটি পড়তে গিয়ে আমি এই সমস্যায় পড়েছিলাম ।

কেন এটি ঘটে এবং এটি স্থির করা যায়?

সম্পাদনা করুন: আমি ইমাস 24.3.1 এর সাথে উবুন্টু 14.04 এলটিএস ব্যবহার করছি। ডিফল্টরূপে আমি "উবুন্টু মনো 13" ফন্ট ব্যবহার করি তবে অন্যান্য ফন্টগুলি কখনও কখনও অক্ষর প্রদর্শন করতে ব্যবহৃত হয়। আমি ইউনিকোড সুস্পষ্টভাবে পরিচালনা করার জন্য কোনও প্যাকেজ ইনস্টল করেছি না, এবং কমান্ডটি ব্যবহার করে এই সমস্যাটি পুনরায় উত্পাদনযোগ্য emacs -Q


3
এটি সম্ভবত আপনি ইনস্টল করা ফন্টগুলির সাথে সম্পর্কিত। বিল্ট ইন শালীন ইউনিকোড সমর্থন সহ একটি ফন্ট ব্যবহার (উদাহরণস্বরূপ দেজাভু সানস মনো) সাহায্য করতে পারে।
ক্রিস

দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন এবং আপনার ওএস, আপনার ইমাস সংস্করণ এবং আপনি ইমাসের জন্য যে ফন্টগুলি ব্যবহার করছেন সে সম্পর্কে তথ্য যুক্ত করুন।
চন্দ্রালম্বি

আপনি ইউনিকোড সেটআপ করতে কোনও প্যাকেজ / কমান্ড ব্যবহার করেছেন কিনা তাও উল্লেখ করুন। বা আপনি বাক্স থেকে যা কিছু এসেছেন কেবল তা ব্যবহার করছেন।
মালাবারবা

ফন্টে সম্মত হন: আমি দেজাভু সানস মনো এবং ইউনিকোড অক্ষর উল্লম্ব লাইন ব্যবধানে কোনও দৃশ্যমান পার্থক্য ছাড়াই রেন্ডার ব্যবহার করি।
ড্যান

আমি আসলে দেজাভু সানস মনো ইনস্টল করেছি এবং এটি কিছু অক্ষরের জন্য ব্যবহৃত হয়, যেমন "ϛ"। সুতরাং এটি Phi জন্য একটি ভিন্ন ফন্ট, যথা নির্বাচন হবে বলে মনে হয় "xft: -unknown-ল্যাটিন আধুনিক গণিত-স্বাভাবিক-স্বাভাবিক-normal- -17- - - - * - 0-iso10646-1"।
প্যাট্রিক স্টিল

উত্তর:


7

এটি ঘটেছিল কারণ ইম্যাকস ইউনিকোড অক্ষর সেটের বিভিন্ন অংশের জন্য বিভিন্ন ফন্ট ব্যবহার করে। কোনও অক্ষরের উপর কার্সার অবস্থান এবং টিপে আপনি কোন ফন্টটি ব্যবহার করছেন তা যাচাই করতে পারেন C-u C-x =। উদাহরণস্বরূপ, একটি ASCII চরিত্রটি সম্পর্কে আমার কনফিগারেশনটি আমি পেয়েছি nil:-apple-Consolas-medium-normal-normal-*-14-*-*-*-m-0-iso10646-1 (#x88), তবে একটি over আমি পেয়েছি nil:-apple-Symbola-medium-normal-normal-*-14-*-*-*-p-0-iso10646-1 (#xCE1)(অন্য কথায় এটি কিছু বিশেষ চরিত্রের জন্য এটি ASCII এবং কনবোলাস ব্যবহার করছে) ola বিভিন্ন ফন্টের বিভিন্ন উচ্চতা রয়েছে এবং দীর্ঘকালীন ফন্টটি প্রদর্শনের জন্য ইমাক সর্বদা লাইন উচ্চতায় যথেষ্ট স্থান দেবে। ডিফল্টরূপে, ইমাসগুলি সিস্টেম-নির্ভর ফন্টগুলি ব্যবহার করার চেষ্টা করবে যা কার্যকর হয় তবে এটি প্রায়শই কুৎসিত ফলাফলের দিকে নিয়ে যায়।

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


1
আমি মনে করি আমার উত্তর হিসাবে ইউনিকোড-ফন্ট ব্যবহার করার জন্য একটি সহজ পদ্ধতি হতে পারে ; এটা কি তোমার জন্য কাজ করে?
কিরিল

@ কিরিল: ইউনিকোড-হরফগুলি সত্যিই আকর্ষণীয় দেখায়, তবে আমি নিশ্চিত নই যে এটি উল্লেখযোগ্য টুইট ছাড়াই এই নির্দিষ্ট সমস্যাটি সমাধান করবে (আমি এটি চেষ্টা করি নি, তাই আমি ভুল হতে পারি)। মূল সমস্যাটি হ'ল একই আকারের বিভিন্ন ফন্টের বিভিন্ন লাইন উচ্চতা থাকে, সুতরাং প্রতিটি ফন্টটি একই লাইনের উচ্চতা না হওয়া অবধি টুইঙ্ক করতে হবে। ইউনিকোড-ফন্টগুলি ফন্টের আকারগুলি টুইঙ্ক করা সহজ করে তোলে এমনটি মনে হয় না।
shosti

হ্যাঁ, আমি এটি সত্য বলে মনে করি, তবে অক্ষরগুলির সম্পূর্ণ ব্লকের জন্য ফন্টগুলি নির্বাচন করা সহজ করে তোলে, তাই আপনাকে নিজেরাই সম্পূর্ণরূপে ম্যানুয়ালি আলাদা আলাদা অক্ষরের মাধ্যমে অনুসন্ধান করার দরকার নেই।
কিরিল

6

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

আমি এখন যা করি তা হল রোল্যান্ড ওয়াকারের দুর্দান্ত ইউনিকোড-ফন্ট প্যাকেজটি। (আমি এটি মেলপা মাধ্যমে ইনস্টল করার পরামর্শ দেব would) এটি পুরোপুরি সমস্যাটি পুরোপুরি সরিয়ে দিয়েছে।

আমি এটিকে আমার সূচনা ফাইলটিতে রেখেছি:

(unicode-fonts-setup)
(set-frame-font "PragmataPro 12")

আমি ডিফল্টভাবে প্রগমতাপ্রো ব্যবহার করি তবে ভাল কভারেজ সহ অন্য কোনও ফন্টও কাজ করবে এবং প্রয়োজনে আপনি প্যাকেজটির সাহায্যে জিনিসগুলিকে আরও কাস্টমাইজ করতে পারেন।


4

আমি ইতিমধ্যে এখানে একটি ভিন্ন উত্তরহীন প্রশ্নের মধ্যে এই সমস্যা ছিল । আমি একই আকারের বিভিন্ন হরফের একই আকারের বিভিন্ন ফন্টের আশা করব, তবে এটি এমনটি বলে মনে হচ্ছে না, তাই আমি এটি ঠিক করার জন্য আমার অ্যাড-হক পদ্ধতি দেখাব।

উচ্চারণগুলি একপাশে রেখে, এবং কেবল সরল অক্ষরগুলিতে ফোকাস করে, বিভিন্ন ফন্টগুলি সমস্ত ভিন্ন অক্ষর প্রদর্শন করার জন্য প্রয়োজনীয় কারণ কিছু ফন্টগুলি অন্যান্য ফন্টে উপস্থিত অক্ষরের পুরো ব্লক বাদ দেয়। অসাধারণ অক্ষরগুলির (যেমন "𝚫") তাদের জন্য কমপক্ষে একটি ফন্ট রয়েছে তা নিশ্চিত করার জন্য, সিম্বুলার মতো একটি ফন্ট ইনস্টল করুন এবং ইউনিকোড-ফন্ট প্যাকেজের রিডমে হরফগুলির তালিকা দেখুন ।

আপনি যদি প্যাকেজ unicode-fontsএবং বেশ কয়েকটি ভাল ফন্ট ইনস্টল করেন তবে সমস্ত অক্ষরকে সমর্থন করা উচিত তবে কিছুকে ইমাসে ভুল প্রদর্শিত উচ্চতা থাকতে হবে।

মনে করুন যে মোনাকোর ভুল উচ্চতা রয়েছে, তবে প্রতীকটি গাণিতিক চিহ্নগুলির জন্য সঠিক উচ্চতা রয়েছে বলে মনে হয় (যেমন সাবজেক্ট অফ অ্যাকুয়াল টু ⊆; বিভিন্ন অক্ষর ব্যবহার C-x 8 RETবা insert-charপরীক্ষার জন্য))। আমার ক্ষেত্রে, মোনাকো, নোটো সানস চিহ্ন এবং অ্যাপল সিম্বলগুলি ব্যবহার না করা যথেষ্ট ছিল; আমার জন্য একটি ভাল ফন্ট ছিল দেজাভু সানস মনো।

প্রথমটি হ'ল আপনি unicode-fontsমোনাকো যুক্ত করে এটি ব্যবহার করতে নিষেধ করতে পারেন unicode-fonts-skip-fonts; এটি পরবর্তী যে কোনও ফন্ট নির্বাচন করে তার সঠিক উচ্চতা থাকতে পারে। বিকল্পভাবে, আপনি unicode-fontsকোনও ইউনিকোড ব্লকের জন্য নির্দিষ্ট ফন্ট ব্যবহার করতে বলতে পারেন (যেমন ম্যাথমেটিক্যাল অপারেটর; এখানে সমস্ত ব্লকের একটি তালিকা ) এর এন্ট্রি পরিবর্তন করে unicode-fonts-block-font-mapping

দ্বিতীয়টি হ'ল আপনি খুব সহজেই অক্ষরগুলির একটি সুনির্দিষ্ট সেট ব্যবহার করে ম্যানুয়ালি এটি করতে পারেন set-fontset-font। যদি গাণিতিক চিহ্নগুলির জন্য সিম্বোলা একটি ভাল ফন্ট হয় (এই ক্ষেত্রে ব্যাপ্তিটি 0x2100..0x23ff), নিম্নলিখিতটি কাজ করা উচিত:

(set-fontset-font t '(#x2100 . #x23ff)
  ;; this should throw an error if there is no such font
  (font-xlfd-name (find-font (font-spec :family "Symbola"))))

অন্যান্য রেঞ্জ আমি নিজেকে সংশোধন করা প্রয়োজন ছিল 2000..206f, 27c0..27ff, 2900..2bff, 1d400..1d7ff

অবশেষে, হাত দ্বারা ভুল কনফিগার করা অক্ষরগুলি অনুসন্ধান করার প্রয়োজন নেই। ধরে unicode-fontsনেওয়া ইনস্টল করা আছে, নিম্নলিখিত ফাংশনটি ভুল উচ্চতা সহ সমস্ত অক্ষরের একটি তালিকা তৈরি করবে:

(defun debug-unicode-heights (&optional block-name)
  "Find all characters in a given block that have incorrect heights.

BLOCK-NAME can be anything that
`unicode-fonts-debug-insert-block' accepts, such as `'all-math',
or a string naming a Unicode block."
  (interactive "sBlock name:")
  (unless block-name (setq block-name 'all-math))
  (let ((buffer (generate-new-buffer (format "debug-unicode-heights:%s" block-name)))
        expected-height
        bad-characters)
    (pop-to-buffer buffer)
    (with-current-buffer buffer
      (unicode-fonts-debug-insert-block block-name)
      (goto-char (point-min))
      (setq expected-height (line-pixel-height))
      ;; (message "Expected height %d" expected-height)
      (while (< (point) (point-max))
        (if (or (= (line-pixel-height) expected-height)
                ;; Some characters are invalid, they have no name
                ;; (their name is just their hex code), and their
                ;; heights do not matter to us.
                (looking-at-p "^.[^\"]*\"#"))
            (delete-region (line-beginning-position)
                           (1+ (line-end-position)))
          (push (char-after (line-beginning-position)) bad-characters)
          (forward-line))))
    ;; (display-message-or-buffer buffer)
    (apply #'string (reverse bad-characters))))

উদাহরণ স্বরূপ:

M-: (debug-unicode-heights 'all-math)

এবং তারপর

M-: (debug-unicode-heights 'all-greek)

সমস্ত খারাপ গাণিতিক চিহ্ন দেখানো হবে। তারপরে তারা কোন ফন্টের সাথে প্রদর্শিত হবে তা পরীক্ষা করে এটি পরিবর্তন করতে পারবেন।

আমার ওএস এক্স ১০.৯.৫ রয়েছে, সুতরাং আমার ফন্টের সেটিংস সম্ভবত আপনার থেকে আলাদা হবে। এটি ইনস্টল করার প্রয়োজন হয় না unicode-fonts; set-fontset-fontআপনি যখনই দেখতে পান যে ইমাসের ডিফল্ট পছন্দগুলি ভাল কাজ করে না তখন আপনার পছন্দসই ফন্ট পছন্দগুলি পুরোপুরি ম্যানুয়ালি নির্দিষ্ট করা সম্ভব ।

পিএস এর বিকল্প রয়েছে: যখন কোনও ফন্ট ধারাবাহিকভাবে খুব বড় / ছোট হয়, আপনি face-font-rescale-alistইমাকগুলি বলতে সর্বদা এই ফন্টের আকারকে একটি ফ্যাক্টরের দ্বারা 0.79 এর গুণক দ্বারা গুণান, যোগ করতে পারেন:

(add-to-list 'face-font-rescale-alist (cons (font-spec :family "STIXGeneral") 0.95) t)

যখন আমি এটি চেষ্টা করেছি, এটি ঠিক কাজ করে নি (আমার বাগের প্রতিবেদনটি এখানে ), তবে এটিও একটি সম্ভাব্য পন্থা।


সম্পর্কে পরামর্শটি set-fontset-fontকেবলমাত্র একমাত্র প্রয়োজন বলে মনে হয়। আমাকে কেবল (set-fontset-font t '(#x1d400 . #x1d7ff) "Symbola")ফ্রেম তৈরির ( যেমন window-setup-hook; এটির সাথে কাজ করার জন্য emacs --daemon) ttf-ancient-fonts উদ্বোধন করতে হয়েছিল, এবং ডেবিয়ানের অধীনে সিম্বোলা বৈশিষ্ট্যযুক্ত প্যাকেজটি ইনস্টল করতে হয়েছিল ।
8:30

2

এটি একটি বাগ; এটি ট্রাঙ্কে স্থির করা হয়েছে। টেক্স এক্স হরফের উপরে লাইন উচ্চতার তথ্যের কারণে সমস্যাটি দেখা দেয়, যা ইম্যাক্স কোনও অক্ষর না পেলে ফিরে আসে falls

ইমাস-বাগের বাগ থ্রেডটিতে আরও অনেক তথ্য রয়েছে।

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