先行スペースが正しくインデントされるように、テキストエディタ(またはGtkテキストビューコンポーネント)が自分のフォント設定に従うようにするにはどうすればよいですか。

先行スペースが正しくインデントされるように、テキストエディタ(またはGtkテキストビューコンポーネント)が自分のフォント設定に従うようにするにはどうすればよいですか。

MATEデスクトップ環境(Debian Linux 12)のリッチテキストなどのコンポーネントでレンダリングされる先行スペースの幅は、言語によって異なります。テキストビューを含めるピューマ/編集者アビマル、等。

PT Mono Regularフォント(この場合)とフォントサイズ(14pt)を事前に選択しましたが、先行スペースの幅は言語行ごとに異なる場合があります。

パート1:間違ったインデントスペースの幅

フォントはPT Mono Regular実際に空白文字を定義します。これはコマンドで確認できます。FCクエリ:

$ fc-query --format='%{charset}\n' /usr/share/fonts/truetype/paratype/PTM55F.ttf 
20-7e a0-109 10c-113 116-11f 122-127 12a-12b ...

コードポイント範囲20-7e表示フォントに空白文字が含まれています。\u0020

ビューコンポーネントは、空白ではなく最初の文字をチェックして空白をレンダリングするために使用するフォントを決定しますが、選択したフォントで定義されている空白文字は確認しないようです。それでは、「AIスペースフォント」機能を取り除くことはできますか?たぶんlibgtk設定ラインがあるかもしれません。

行の前に char 記号を追加して問題を解決できる場合:

パート2:先行スペースがない場合のスペース幅の修正

したがって、ビューコンポーネントは、スペースをレンダリングするために使用されたフォントを「推測する」ように見えます。スペースの前の文字だけを確認し、後の文字は確認しません。ルールの唯一の例外は、スペースが行の前にある場合(通常はインデントの場合)です。スペースの前に文字がないため、編集者はスペースの後ろの文字を検索して言語を検索しようとしますが、通常は検索します。空白の前の文字について。スペース。

ただし、タブを使用すると\u0009空白文字の代わりに\u0020インデントの場合、タブは機能します。一部のテキストエディタは次のとおりです。原子リーダーだけを扱う\u0020スペースをタブにグループ化します。たとえば、4つを削除できます。\u0020スペースプラスワンバックスペースキーキーストローク入力原子またはVSCode

下のスクリーンショットは、スペースをレンダリングするためにさまざまなフォントを選択したときにテキストエディタがどのように見えるかを示しています。

パート3:さまざまなスペース文字の幅に注意してください。

フォントファイルによると、最初の行(英語)のみが次の定義を使用します。PTM55F.ttf文書。まあ、スペースはテキストの中央にあり、スペースの幅は言語の書き込みスタイルを反映しているので、言語ごとに異なる幅のスペースをレンダリングするのが合理的です。

ただし、インデントには前のスペースを使用することがよくあります。

この問題は他のフォントにも存在します。これは特に明らかなようです固定幅フォントファミリーフォントです。

たぶんFontconfigはこの問題を解決できますか?

サンプルテキストファイル

ベストアンサー1

おすすめ記事