太字のときにフォントの高さが変わるのはなぜですか?


9

それはとても迷惑です...

線上のテキストが太字になるように面が変更されている場合、線の高さは(おそらく)1ピクセル増加します。画像と一緒に表示すると最適です。

ここに画像の説明を入力してください

どうしてこれなの?どうすれば防止できますか?


リクエストに応じて、プラットフォームに関する情報:

  • amd64上のDebian GNU / Linux sid(不安定)
  • EmacsはXFCE 4.12でlibgtk-3.so.0(gtk 3.14.5)を使用します

8pt、9pt、10pt、11ptで次のフォントを試しました。

  • DejaVu Sans Mono
  • DejaVu Sans
  • デジャヴセリフ
  • ドロイドSans Mono
  • 解放モノ

この問題は、DejaVu Sans MonoおよびDejaVu Sansでのみ発生し、9ptおよび10ptでのみ発生します。(上の画像はを示していますDejaVu Sans Mono-9。)


2
スペースを配置する前にdefunexampleのface属性を確認し、次にdefunexampleの間にスペースを挿入した後、各単語をもう一度確認する必要があります。これは、カーソルを目的の位置に置いてから入力しますC-u C-x =。おそらく、顔に影響を与えるのいずれかがわかります関数定義や顔に影響を与える例は、フォアグラウンドのちょうど基本色以外の、例えば-あなたが見るの行動に責任がある異なる属性を持っています。顔属性はユーザーがカスタマイズできます。
弁護士、2015年

ご質問にオペレーティングシステムとウィンドウマネージャー、およびEmacsが使用するGUI(Gtk2、Gtk3など)に関する情報を追加できますか?
lunaryorn

@lawlist:ありがとう。スペースを使用すると、font-lock-function-name-faceが適用され、高さが指定されていません(したがって、デフォルトを想定していますか?)。スペースがないと、顔は適用されません(つまり、私はデフォルトを想定していますか?)デフォルトはテーマで:height 90(9pt)に設定されています。
エダム

@lawlist:Iの追加/削除/追加/削除する場合は、テーマに、いくつかのより多くの調査.... :weight boldからfont-lock-function-name-face(とテーマの再実行custom-theme-set-facesコマンド)を、私はの高さは見ることができるdefun1ピクセルで行の変更を!それは間違いなくそれを引き起こしている大胆な属性だと思います。
エダム

あなたのコメントに基づいた私の推測は、選択したフォントのファミリーは太字の属性の高さが異なるため、手動で縮小しない限り変更できないことです-ポイントサイズを徐々に縮小して試行錯誤します。または、太字を適用しても高さが変わらないファミリを選択します。個人的には、バッファー内の視覚効果に関連するさまざまな理由により、カスタムテーマで太字や下線を使用しなくなりました。現在の行に下線を作成すると、オーバーレイが使用されます。太字の場合、私は単純に強い色を使用します-たとえば、マゼンタ、黄色など
ローリスト

回答:


2

DejaVuでは、そのポイントサイズでフォントの高さが変化します。これは、2つの通常のフォントとボールドフォントのフォントの高さの情報が同じである場合でも異なるためです。

私が使用しているDejaVu Sans Mono 10フォントでは、フォントの高さが通常の太字と太字の間で変更されません。私はそれを私の.emacsに設定しました(set-frame-font "DejaVu Sans Mono-10")

だからあなたは比較するものを持っています、「DejaVu Sans 10」フォントの情報(Emacs 25のfont-info):

(font-info "DejaVu Sans Mono-10")
["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" 
"DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:
width=normal:spacing=100:scalable=true" 13 17 0 0 0 8 13 4 8 8 
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" (opentype ((DFLT ...) )))]

後続の情報に基づいて編集:

上記のフォント情報では、フォントの高さを17と表示していますが、高さは15(標準)または16(太字)と報告されています。emacs 25では、これらの3 0の後に追加のフォント情報があり、特にフォントのディセントは4です。

Emacs 24または25ではDejaVu Sans MonoとBoldバリアントの問題はありませんが、最も単純なことは、フォントとサイズを使用して、(font-infoで示されるように)通常と太字の間で幅を変更しないことです。またはDejaVu以外の何か。

これを引き起こしているものについては、あなたのライブラリの1つである可能性があります(私のgtkはlibgtk-x11-2.0.so.0です)が、この特定のライブラリであるとは思えません。また、それがttfファイルまたはパッケージであることを疑ってください。おそらくフリータイプのレンダリングです(私はlibfreetype.so.6を持っています)。DejaVuは他のフォントと同じように拡大縮小されるため、DejaVuの作成方法によってくすぐられた計算エラーは、これらが特定のサイズで機能するが他のサイズでは機能しない理由を説明します。

問題がEmacs固有であるかどうかを確認するには、2つのターミナルウィンドウを表示します。1つは太字のプロンプトを表示し、もう1つは表示せずに、それらの行間隔を比較します。Emacsのように異なる場合、これはレンダリングやフォントに関係しています。

emacsをコンパイルした場合、何かが起こっている可能性があります。


これはうまくいきませんでした...(私はDejaVu Sans Mono-9BTW を使用していました)。上記の説明を更新します...
edam、2015年

モードラインのフォントは同じです。Mono 10は同じ動作を示しますが、8と11prは示しません。これは、フォントのレンダリングと、通常と太字で返される異なる行の高さと関係があるはずです。Emacsはfontconfigを使用していますか?
edam

1
Emacsはfontconfigを使用せず、グリフの選択に関しては一般的にかなりユニークです。
wasamasa

(font-info "DejaVu Sans Mono-10")くれ["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]ます。私もfonts-dejavu-coreインストールしました、そしてまたttf-dejavu-core。それらは両方ともDejaVuSansMono.ttf(異なるディレクトリにありますが、同じファイルなので、これが重要であるとは思いません)。私はまたHeight: 98、顔から得ます(上記の問題を示すDajaVu Sans Mono-10を使用している場合)。これ以上の提案をお待ちしています!:)
edam

フォント情報パラメータの一部が異なることに注意してください。私には「13 17 ...」があり、あなたには「13 15 ..」があります。そして、help-for-function font-infoを取得すると、17(私)と15(あなた)の最初の違いが高さであることがわかります。高さを17に変更してみてください
岩だらけの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.