8 返信 最新の回答 日時: Dec 5, 2017 11:07 PM ユーザー:budat

    フォント置換後“見つからない字形”にならない

    budat

      Pr6からProにフォントを置き換えたときなど、元のフォントより収録文字数が少なくなると、

      そのフォントが持っていない字形を“見つからない字形”としてInDesignが教えてくれますが、

      一部の字形は“見つからない字形”にならないことがわかりました。

       

      再現例:

      「小塚ゴシック Pr6N R」で「CID:15508」の文字を入力します。

      その文字を「小塚ゴシック Pro R」に置き換えます。

      見つからない字形になりません。フォントは「小塚ゴシック Pro R」になっています。

      PDFを書き出してみると、その文字のフォントが「Symbol」だとわかります。

      (他の字形でもいくつかあるようです。)

      見つからない字形じゃあない.png

       

      “見つからない字形”という機能は不完全で、フォント置換後はよく見て確認する。

      ということになるのでしょうか。

      ・こうならないフォント置換方法

      ・この状態の文字を探す方法

      などご存知の方ご教示ください。

        • 1. Re: フォント置換後“見つからない字形”にならない
          monokano Most Valuable Participant

          再現しました。これはヤバいですねぇ…

          ざっと調べたところ、同様の文字は「≈ ∆ ∏ ≤ ≥ ◊」でした。

          AJ1フォントだけでなく、すべてのフォントに発生するようです。

          ですからCIDではなく文字コードで考えた方が良いでしょう。

          Symbolにフォールバックされているのに、全く違うフォント名が表示されるのはバグだと思います。

          勝手にSymbolにフォールバックするのも問題だと思いますが…

           

          ・こうならないフォント置換方法

          ・この状態の文字を探す方法

          いずれもその方法はないかもしれません…あるといいなぁ…

           

          追記:

          「∥」もCS6では問題のある挙動をするのですが、混乱するのでここでは除外します。

          • 2. Re: フォント置換後“見つからない字形”にならない
            assause Adobe Community Professional & MVP

            Windows版とMac版のInDesign CC Ver.13(2018)で確認しましたが、

            どうやらMac版だけの問題ではないかと推測されます。

             

            Windows版で、字形パネルでCID:15508(u+2248)を入力し、

            フォント検索で小塚ゴシック Pr6Nから小塚ゴシック Proに置換した直後の結果は下記で、

            見つからない字形の保護の警告ダイアログは表示され、処理後の該当部分はPr6Nのままです。

            IDCC2018_CID15508_1.png

             

            そのうえでタグ付きテキストで書き出した結果は下記で、

            やはり該当部分は小塚ゴシック Pr6Nのままです。

            IDCC2018_CID15508_2.png

             

            一方、Mac版で確認したところ、見つからない字形の保護については警告が出ないうえ、

            表示結果を確認すると該当部分はProに変わってしまっています。

            そしてタグ付きテキストで書き出したところ、やはり小塚ゴシック Proが適用されてしまっています。

            IDCC2018_CID15508_3.png

            もちろん小塚ゴシック Proには該当グリフが存在するわけがありませんから、

            表示もPDFに書き出したときもミッシンググリフ扱いになるはずですが、

            それがおかしくなっているので、PDF出力時に代替でSymbolにされてしまったのだと推測できます。

             

            とりあえず現状としては「フォント置換時は気を付ける」くらいしかないような気もしますが……。

            • 3. Re: フォント置換後“見つからない字形”にならない
              monokano Most Valuable Participant

              PDF出力時に代替でSymbolにされてしまったのだと推測できます。

              実は、inddの段階でSymbolのグリフが表示されています。

              それなのに、変更したフォント名が表示されてしまう。かなり厄介な現象です。171206-0002.png

              • 4. Re: フォント置換後“見つからない字形”にならない
                assause Adobe Community Professional & MVP

                あ、ごめんなさい、書き方が悪かったです。

                確かに表示自体がすでにSymbolに変わってますね。

                その割に文字パネルでは置換後のフォントに変わってしまっている、ということになるので

                問題としては大きいというのは仰る通りだと思います。

                • 5. Re: フォント置換後“見つからない字形”にならない
                  yusuke.s Level 3

                  macOS 10.10.5、InDesign CS6〜CC2017で現象を確認できました。

                  面白いのは、InDesignがグリフIDでコンフリクトを起こしてしまう点です。字形パネルを開くと、Symbolの「≈」(CID53)と、小塚明朝ProRの「T」(CID53)を混同 し、見た目がSymbolになっている小塚の「≈」を選択すると、字形パネルでは「T」が選択されます。

                  symbol.png

                  kozuka.png

                  • 検証1

                  Symbolフォントをディアクティベートすると、見た目がSymbolになっている小塚明朝ProRの「≈」も見つからないフォントとして見つけることができます。ただSymbolフォント はシステムフォントのひとつなので、オン・オフを繰り返すことはあまり推奨できません。

                  ss_2017126101939.png

                  • 検証2

                  字形検索から小塚明朝ProR、CID53を指定しても「T」しか見つかりません。一方、Symbol、CID53としても、見た目がSymbolになっている小塚の「≈」はヒットしません。

                   

                  ただし文字コードは当然U+2248なので、正規表現検索では\x{2248}とすると両方の「≈」をヒットさせることができます。

                  以上より、Symbolフォントがグリフを持つ文字のコードポイントを総当りで検索し、ヒットした文字のフォント名がSymbolではないもの、が今回探したい文字ということになります。

                  それをスクリプト化したのが以下です。

                  if (!app.documents.length) myQuit("ドキュメントが開かれていません");
                  
                  
                  //検索条件:Symbolが収録する全文字
                  var find = "[\\x{21}\\x{23}\\x{25}\\x{26}\\x{28}\\x{29}\\x{2b}\\x{2c}\\x{2e}\\x{2f}\\x{30}\\x{31}\\x{32}\\x{33}\\x{34}\\x{35}\\x{36}\\x{37}\\x{38}\\x{39}\\x{3a}\\x{3b}\\x{3c}\\x{3d}\\x{3e}\\x{3f}\\x{5b}\\x{5d}\\x{5f}\\x{7b}\\x{7c}\\x{7d}\\x{a9}\\x{ac}\\x{ae}\\x{b0}\\x{b1}\\x{d7}\\x{f7}\\x{192}\\x{2b9}\\x{2ba}\\x{338}\\x{391}\\x{392}\\x{393}\\x{394}\\x{395}\\x{396}\\x{397}\\x{398}\\x{399}\\x{39a}\\x{39b}\\x{39c}\\x{39d}\\x{39e}\\x{39f}\\x{3a0}\\x{3a1}\\x{3a3}\\x{3a4}\\x{3a5}\\x{3a6}\\x{3a7}\\x{3a8}\\x{3a9}\\x{3b1}\\x{3b2}\\x{3b3}\\x{3b4}\\x{3b5}\\x{3b6}\\x{3b7}\\x{3b8}\\x{3b9}\\x{3ba}\\x{3bb}\\x{3bc}\\x{3bd}\\x{3be}\\x{3bf}\\x{3c0}\\x{3c1}\\x{3c2}\\x{3c3}\\x{3c4}\\x{3c5}\\x{3c6}\\x{3c7}\\x{3c8}\\x{3c9}\\x{3d1}\\x{3d2}\\x{3d5}\\x{3d6}\\x{2022}\\x{2026}\\x{2044}\\x{20ac}\\x{2111}\\x{2118}\\x{211c}\\x{2122}\\x{2135}\\x{2190}\\x{2191}\\x{2192}\\x{2193}\\x{2194}\\x{21b5}\\x{21d0}\\x{21d1}\\x{21d2}\\x{21d3}\\x{21d4}\\x{2200}\\x{2202}\\x{2203}\\x{2205}\\x{2207}\\x{2208}\\x{2209}\\x{220d}\\x{220f}\\x{2211}\\x{2212}\\x{2217}\\x{221a}\\x{221d}\\x{221e}\\x{2220}\\x{2227}\\x{2228}\\x{2229}\\x{222a}\\x{222b}\\x{2234}\\x{223c}\\x{2245}\\x{2248}\\x{2260}\\x{2261}\\x{2264}\\x{2265}\\x{2282}\\x{2283}\\x{2284}\\x{2286}\\x{2287}\\x{2295}\\x{2297}\\x{22a5}\\x{22c5}\\x{2320}\\x{2321}\\x{239b}\\x{239c}\\x{239d}\\x{239e}\\x{239f}\\x{23a0}\\x{23a1}\\x{23a2}\\x{23a3}\\x{23a4}\\x{23a5}\\x{23a6}\\x{23a7}\\x{23a8}\\x{23a9}\\x{23aa}\\x{23ab}\\x{23ac}\\x{23ad}\\x{23ae}\\x{23af}\\x{23d0}\\x{25ca}\\x{2660}\\x{2663}\\x{2665}\\x{2666}\\x{3008}\\x{3009}\\x{f8e5}\\x{f8e8}\\x{f8e9}\\x{f8ea}\\x{f8ff}]";
                  
                  
                  //検索条件のリセット
                  resetRegex();
                  app.findGrepPreferences.findWhat = find;
                  var findSymbols = app.findGrep();
                  //Symbol収録文字の検索
                  var res = [];
                  for (var i=0, len=findSymbols.length; i<len; i++){
                      if (findSymbols[i].appliedFont.fontFamily !== "Symbol") res.push(findSymbols[i]);
                      }
                  //おかしいフォントを検索
                  if (!res.length) {
                      alert("見つかりませんでした");
                      exit();
                      }
                  if (!confirm ("フォント情報がおかしいSymbolの字形が\r「"+res.length+"個」見つかりました。\r確認しますか?")) exit();
                  for (var i=0,len=res.length; i<len; i++){
                      res[i].showText();
                      if (confirm ("スクリプトを中断しますか?\r"+(i+1)+" / 全"+len+"個")) exit();
                      }
                  alert("終了しました");
                  
                  
                  function resetRegex() {
                      //検索の初期化
                      app.findGrepPreferences = NothingEnum.nothing;
                      app.changeGrepPreferences = NothingEnum.nothing;
                      //検索オプション
                      app.findChangeGrepOptions.includeLockedLayersForFind = true;//ロックされたレイヤーをふくめるかどうか
                      app.findChangeGrepOptions.includeLockedStoriesForFind = true;//ロックされたストーリーを含めるかどうか
                      app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
                      app.findChangeGrepOptions.includeMasterPages = true;//マスターページを含めるかどうか
                      app.findChangeGrepOptions.includeFootnotes = true;//脚注を含めるかどうか
                      app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
                      app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
                      }
                  function myQuit(){
                      if (arguments.length) alert(arguments[0]);
                      exit();
                      }
                  

                  うまい置換方法はわかりませんが、これで確認は出来ると思います。

                  3 人が役に立つと言っています
                  • 6. Re: フォント置換後“見つからない字形”にならない
                    monokano Most Valuable Participant

                    Symbolフォントがグリフを持つ文字のコードポイントを総当りで検索し

                    普通によく使われる文字がかなり含まれていますよね。

                     

                    条件を絞ってみます。

                    • AJ1-5以降のプロポーショナルグリフにマッピングされている文字コードのうち、AJ1-4フォントに変更すると存在しないのにそのフォント名が表示されてしまう文字

                    こうして抽出してみると「 ≈ ∆ ∏ ≤ ≥ ◊」の7文字が該当します。しかも「 ∆」の2文字はSymbolフォントにありません。

                    (「∆  U+2206」はSymbolフォントにないのに「Δ  U+0394」のグリフが表示されるという込み入ったことになっています)

                    実用十分として、

                    • [\x{2225}\x{2248}\x{2206}\x{220F}\x{2264}\x{2265}\x{25CA}]

                    これを単純に正規表現マッチで調べるのが落とし所かもしれません。

                    1 人が役に立つと言っています
                    • 7. Re: フォント置換後“見つからない字形”にならない
                      yusuke.s Level 3
                      • [\x{2225}\x{2248}\x{2206}\x{220F}\x{2264}\x{2265}\x{25CA}]

                      これを単純に正規表現マッチで調べるのが落とし所かもしれません。

                      おっしゃる通り、無駄なく漏れなくであればこれで十分ですね。ありがとうございます。

                       

                      InDesignの検索ではフォント条件にSymbol「以外」、ができないので、ひとつずつ確認していくか、あまりにたくさん出る場合はスクリプトを利用する感じでしょうね。

                      ちなみに、下記は先ほどのスクリプトの検索対象をこの正規表現に書き換えたものです。find変数が短くなっただけですが、一応全文載せます。

                       

                      if (!app.documents.length) myQuit("ドキュメントが開かれていません");
                      
                      
                      //検索条件:
                      //AJ1-5以降のプロポーショナルグリフにマッピングされている文字コードのうち、AJ1-4フォントに変更すると存在しないのにそのフォント名が表示されてしまう文字
                      var find = "[\\x{2225}\\x{2248}\\x{2206}\\x{220F}\\x{2264}\\x{2265}\\x{25CA}]";
                      
                      
                      //検索条件のリセット
                      resetRegex();
                      app.findGrepPreferences.findWhat = find;
                      var findSymbols = app.findGrep();
                      //Symbol収録文字の検索
                      var res = [];
                      for (var i=0, len=findSymbols.length; i<len; i++){
                          if (findSymbols[i].appliedFont.fontFamily !== "Symbol") res.push(findSymbols[i]);
                          }
                      //おかしいフォントを検索
                      if (!res.length) {
                          alert("見つかりませんでした");
                          exit();
                          }
                      if (!confirm ("フォント情報がおかしいSymbolの字形が\r「"+res.length+"個」見つかりました。\r確認しますか?")) exit();
                      for (var i=0,len=res.length; i<len; i++){
                          res[i].showText();
                          if (confirm ("スクリプトを中断しますか?\r"+(i+1)+" / 全"+len+"個")) exit();
                          }
                      alert("終了しました");
                      
                      
                      function resetRegex() {
                          //検索の初期化
                          app.findGrepPreferences = NothingEnum.nothing;
                          app.changeGrepPreferences = NothingEnum.nothing;
                          //検索オプション
                          app.findChangeGrepOptions.includeLockedLayersForFind = true;//ロックされたレイヤーをふくめるかどうか
                          app.findChangeGrepOptions.includeLockedStoriesForFind = true;//ロックされたストーリーを含めるかどうか
                          app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
                          app.findChangeGrepOptions.includeMasterPages = true;//マスターページを含めるかどうか
                          app.findChangeGrepOptions.includeFootnotes = true;//脚注を含めるかどうか
                          app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
                          app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
                          }
                      function myQuit(){
                          if (arguments.length) alert(arguments[0]);
                          exit();
                          }
                      
                      4 人が役に立つと言っています
                      • 8. Re: フォント置換後“見つからない字形”にならない
                        budat Level 1

                        皆様、隅々まで検証していただき、ありがとうございます。

                        InDesignのアップデートで直るよう期待しています。

                         

                        それまで ≈ ∆ ∏ ≤ ≥ ◊ を使うときは、

                        指定フォント通りの意図した字形になっているか注意するようにします。

                         

                        載せていただいたスクリプトは、

                        未然に防ぐ手段として、または問題発生後の確認手段として検討します。