<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <dfn>文字幅</dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角文字</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角文字</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字のレンダリング</anchor>の問題だったり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字コード</anchor>表現の問題だったり、
その他何だかよくわからない問題だったりします。</p><section><h1>フォント機能</h1><section><h1>フォント機能 <code>chws</code> (OpenType)</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"></ed></section><section><h1>フォント機能 <code>fwid</code> (OpenType)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント機能</anchor> <dfn><code>fwid</code></dfn>
は、
Full Widths (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全幅</anchor>)
と説明されています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal></src></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
<cite xml:lang="en-us">Registered features, f-j (OpenType 1.9.1) - Typography | Microsoft Learn</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PeterCon</anchor>, <time>2024-05-31T17:42:16.000Z</time>, <time>2025-04-13T13:35:46.695Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#fwid">https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#fwid</anchor-external></li></ul></refs><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
<code>fwid</code>
は、グリフ集合中にあってその他の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>幅</anchor><rt xmlns="http://www.w3.org/1999/xhtml">width</rt></rubyb>に設定されている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>を置換して、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全 (通常は <anchor>em</anchor>) 幅<rt xmlns="http://www.w3.org/1999/xhtml">full (usually em) width</rt></rubyb>に設定された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>とします。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJKVフォント</anchor>では、
「lower ASCII」 ラテン文字や各種<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">記号<rt xmlns="http://www.w3.org/1999/xhtml">symbol</rt></rubyb>を含むかもしれません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> ちょっと何言ってるのかわかりませんが、世にいう<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角ASCII文字</anchor>のことでしょうか。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欧州のフォント<rt xmlns="http://www.w3.org/1999/xhtml">European font</rt></rubyb>では、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">可変幅<rt xmlns="http://www.w3.org/1999/xhtml">proportionally-spaced</rt></rubyb><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>を<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定幅<rt xmlns="http://www.w3.org/1999/xhtml">fixed-width</rt></rubyb><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>
(<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">通常<rt xmlns="http://www.w3.org/1999/xhtml">generally</rt></rubyb>は 0.6 em 幅に設定) に置換します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fullwidth</anchor> というのは普通は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">東洋</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角文字</anchor> (1em 幅で表示) を指す用語ですが、
ここでは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">欧州</anchor>の 0.6em 幅の固定幅の表示にも使えるとされています。
任意幅 → 固定幅、という点こそ共通しているものの、
両者はまったくの別物です。同時実装不能です。
東洋フォントと欧州フォントは別製品なので交わることはないという世界観なのでしょうか。
それとも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語系</anchor>などで区別しろということなのでしょうか。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AJ1</anchor> はじめ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">東洋</anchor>のフォントでは <code>fwid</code> は実際に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角</anchor>への置換などで一般的に使われています。
欧州のフォントではどうなのでしょう。</p></section><section><h1>フォント機能 <code>halt</code> (OpenType)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント機能</anchor> 
<dfn><code>halt</code></dfn>
は、
Alternate Half Widths
と説明されています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> 
<code>halt</code>
は、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既定の状態<rt xmlns="http://www.w3.org/1999/xhtml">by default</rt></rubyb>で<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角の大きさ<rt xmlns="http://www.w3.org/1999/xhtml">have full-width metrics</rt></rubyb>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>を、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定幅で半角幅<rt xmlns="http://www.w3.org/1999/xhtml">fixed, half-em widths</rt></rubyb>に合わせて<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">再配置<rt xmlns="http://www.w3.org/1999/xhtml">Re-spaces</rt></rubyb>することで、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JLREQ</anchor>
(特に <csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">3.1.4 Positioning of Consecutive Opening Brackets, Closing Brackets, Commas, Full Stops and Middle Dots</csection>,
<csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">B. Spacing between Characters</csection>)
や同様の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJKV</anchor>
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文章配置<rt xmlns="http://www.w3.org/1999/xhtml">text-layout</rt></rubyb>仕様書 (具体例: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CLREQ</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">KLREQ</anchor>) で説明されているような、
既定の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>が<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角幅<rt xmlns="http://www.w3.org/1999/xhtml">full-width</rt></rubyb>である<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角形<rt xmlns="http://www.w3.org/1999/xhtml">half-width forms</rt></rubyb>を期待するような、
より洗練された文章配置法を近似するものです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CLREQ</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JLREQ</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">KLREQ</anchor>
で説明される <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJKV</anchor> <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>文章</anchor><rt xmlns="http://www.w3.org/1999/xhtml">text</rt></rubyb>の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">高度な配置<rt xmlns="http://www.w3.org/1999/xhtml">advanced layout</rt></rubyb>に対応した<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配置エンジン<rt xmlns="http://www.w3.org/1999/xhtml">layout engine</rt></rubyb>は、
<code>halt</code>
を使う<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきではありません<rt xmlns="http://www.w3.org/1999/xhtml">should not</rt></rubyb>。
そのような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>では、
<code>halt</code>
を用いるかどうかの選択肢を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に提示しないのが適切です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 
そうでない実装では、 <code>halt</code>
を<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>横書き</anchor>配置<rt xmlns="http://www.w3.org/1999/xhtml">horizontal layout</rt></rubyb>におけるすべての
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJKV</anchor> <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文章<rt xmlns="http://www.w3.org/1999/xhtml">text</rt></rubyb>に対して、
または特別な扱いを必要とする特定の文字、例えば<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>括弧</anchor><rt xmlns="http://www.w3.org/1999/xhtml">brackets</rt></rubyb>,
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>句読点</anchor><rt xmlns="http://www.w3.org/1999/xhtml">punctuation</rt></rubyb>, <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>引用符</anchor><rt xmlns="http://www.w3.org/1999/xhtml">quotation marks</rt></rubyb>に選択的に、
有効にする<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>。
これは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJK</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文章</anchor>に対しては既定の状態で有効とする<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 
<code>GPOS</code> <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">lookupType</code></f> <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</n>
の 
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">xPlacement</code></f>,
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">yPlacement</code></f>,
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">xAdvance</code></f>,
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">yAdvance</code></f>
で代替となる metrics を指定することが<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">推奨<rt xmlns="http://www.w3.org/1999/xhtml">recommended</rt></rubyb>されています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 
<code>halt</code>
は
<code>hwid</code>
とは違って新しい<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>に<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換<rt xmlns="http://www.w3.org/1999/xhtml">substitute</rt></rubyb>するものではありません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 
<code>halt</code>
は
<code>chws</code>
とは違って<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈的<rt xmlns="http://www.w3.org/1999/xhtml">contextual</rt></rubyb>ではありません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> の仕様上は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;25</anchor-internal> 以外の方法が禁止されているわけではなく、
例えば他の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">lookupType</code></f> により条件を記述することも、
<code>GSUB</code> で別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>に置換することも技術的には可能ですが、
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal> や <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal> のような説明があり、そうした用法は期待されていないようです。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 
文脈的でないものに限るとされていること、既定の状態で有効にすることが求められていることで、
この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント機能</anchor>の利用場面は限られてきます。
例えば<sw-ch xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">。</sw-ch>は通常次の文章と密着しないように右半分に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アキ</anchor>がある状態の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字形</anchor>とされます。
もし <code xmlns="http://www.w3.org/1999/xhtml">halt</code> でこの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アキ</anchor>を削って<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角</anchor>に調整すると、読みづらい文章になってしまいますから、
それが既定の状態となるべきではなく、 <code xmlns="http://www.w3.org/1999/xhtml">halt</code> で指定するべきではなかったということになります。
また、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換</anchor>ではなく <code xmlns="http://www.w3.org/1999/xhtml">GPOS</code> によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角</anchor>に変換することが求められているので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角英数字</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角英数字</anchor>への置換には適用できない場合が多いと考えられますし、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JLREQ</anchor> の参照箇所から考えてもその用途は想定外と思われます。
こうした適用できない場面を除くと、
実際に使えそうなのは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">括弧</anchor>の前後の空白の除去くらいでしょうか。</comment-p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
<cite xml:lang="en-us">Registered features, f-j (OpenType 1.9.1) - Typography | Microsoft Learn</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PeterCon</anchor>, <time>2024-05-31T17:42:16.000Z</time>, <time>2025-05-13T12:06:53.810Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#halt">https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#halt</anchor-external></li></ul></refs></section><section><h1>フォント機能 <code>hwid</code> (OpenType)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント機能</anchor>
<dfn><code>hwid</code></dfn>
は、
Half Widths
です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント機能</anchor>
<code>hwid</code>
は、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">可変幅<rt xmlns="http://www.w3.org/1999/xhtml">proportional widths</rt></rubyb>や<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定幅<rt xmlns="http://www.w3.org/1999/xhtml">fixed widths</rt></rubyb>であっても<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角幅<rt xmlns="http://www.w3.org/1999/xhtml">half an em</rt></rubyb>以外の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>を、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角幅<rt xmlns="http://www.w3.org/1999/xhtml">half-em (en) widths</rt></rubyb>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>に置換します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> 
多くの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CJKVフォント</anchor>は複数の幅から選べるグリフの集合を有しており、
<code>hwid</code>
はそのうち<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>半角</anchor>版<rt xmlns="http://www.w3.org/1999/xhtml">half-em variants</rt></rubyb>を選ぶものです。 
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> 
これが好ましい挙動である場面はいろいろあります。
例えば<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">古めの<rt xmlns="http://www.w3.org/1999/xhtml">older</rt></rubyb><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">デスクトップ文書<rt xmlns="http://www.w3.org/1999/xhtml">desktop documents</rt></rubyb>との互換性などです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> 
古めのデスクトップ文書というのが何を意味しているのかよくわかりませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定幅フォント</anchor>が標準的に使われていた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">平成時代</anchor>初期頃までの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パソコン</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワープロ</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">表計算</anchor>その他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>が想定されているのでしょうか。</comment-p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> 
<cite xml:lang="en-us">Registered features, f-j (OpenType 1.9.1) - Typography | Microsoft Learn</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PeterCon</anchor>, <time>2024-05-31T17:42:16.000Z</time>, <time>2025-05-15T11:39:38.036Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#hwid">https://learn.microsoft.com/en-us/typography/opentype/spec/features_fj?source=recommendations#hwid</anchor-external></li></ul></refs></section><section><h1>共通</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> 
水平グリフ幅機能 (<code>chws</code>, <code>fwid</code>,
<code>halt</code>,
<code>hwid</code>, <code>palt</code>,
<code>pkna</code>, <code>pwid</code>, <code>qwid</code>, <code>twid</code>, <code>pnum</code>, <code>tnum</code>)
とは互いに排他的であり、 <code>halt</code> が適用されるときはこれらは無効とする<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> 
<code>halt</code> が適用されるときは <code>apkn</code> や <code>kern</code>
は無効とする<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<code>lfbd</code>, <code>rtbd</code> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定幅</anchor>機能を使った<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>に適用されるべきではありません。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>lfbd</anchor> </sw-see></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> 
こうした排他的適用に関する推奨事項が誰に対するものなのか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>開発者なのか (仕様上難しそう)、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>の実装者なのか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>なのか、よくわかりません。
<csection>UI suggestion</csection>
から参照されていることがある <src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src> ので、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>が提示する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者インターフェイス</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に対する推奨でしょうか。</comment-p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<code>fwid</code>,
<code>hwid</code>
は、
<code>GSUB</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor> <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</n> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>を<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全<anchor>前進幅</anchor><rt xmlns="http://www.w3.org/1999/xhtml">full advance width</rt></rubyb> 
(<code>fwid</code>)
ないし
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角幅<rt xmlns="http://www.w3.org/1999/xhtml">half-em widths</rt></rubyb>
(<code>hwid</code>)
のものに置換することもできますし、
<code>GPOS</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor> <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</n> の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">xPlacement</code></f>
と <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">xAdvance</code></f> で 
proportional グリフに全角 metrics (<code>fwid</code>)
ないし元のグリフに半角の metrics (<code>hwid</code>)
を指定することもできます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
こうした実装方法が<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">推奨<rt xmlns="http://www.w3.org/1999/xhtml">recommended</rt></rubyb>されている <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src>
ものの、その他の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor> 型が禁止されているわけではありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
既定の状態では無効とする<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク付け</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>の制御やその他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>の基準に応じて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連なり</anchor>に適用できるという形に実装できます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;7</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal></src></p></section></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 関連: 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">幅写像</anchor>,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AA</anchor></p></section><section><h1>メモ</h1><ul><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end>
<cite>Emacs22 + UTF-8 における文脈依存な文字幅の問題について</cite> (<time>2008-06-29 01:03:38 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.pqrs.org/tekezo/emacs/doc/wide-character/index.html">http://www.pqrs.org/tekezo/emacs/doc/wide-character/index.html</anchor-external><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 消滅確認 <time>2022-10-29T04:24:23.400Z</time></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite>Emacs22 + UTF-8 における文脈依存な文字幅の問題について</cite>, <time>2022-10-29T04:24:10.000Z</time>, <time>2008-03-13T00:24:02.705Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://web.archive.org/web/20080313002338/http://www.pqrs.org/tekezo/emacs/doc/wide-character/index.html">https://web.archive.org/web/20080313002338/http://www.pqrs.org/tekezo/emacs/doc/wide-character/index.html</anchor-external></li></ul></li></ul></section></body></html>