MS Word の非表示の書式記号

MS Word の非表示の書式記号

ペルシア語の Word 文書があり、その中に次のようなフレーズがたくさんあります。

私の問題は、「و نشیب」が「هایی」に接続される部分です。

最初は、それらの間にゼロ幅の非結合文字があるように見えますが、実際にコピーしようとすると、何もコピーされませんでした。

また、フレーズ全体をメモ帳にコピーすると、次のようになりました: "و نشیبهایی" ご覧のとおり、前述の 2 つの単語の間には何も入っていません。

隠し文字があるかどうかを確認するために、「ホーム」タブの「段落」グループで¶の表示/非表示をオンにしたところ、次のようになりました。

さて、この文字を操作する方法があるかどうか、たとえば ZWNJ に置き換える方法があるかどうか疑問に思います。

その問題のあるファイル(下記もお読みください)

答え1

これは私の元の回答を完全に置き換えるものです (元のテキストは以下にあります)。

ドキュメントでは、単語は緑色 (「希望どおりにコピーされた単語」) と赤色 (「希望どおりにコピーされなかった単語」) でマークされます。

どちらのタイプも、ZWNJ を使用します。たとえば、右ではなく左にのみ結合する必要がある Heh 文字の前に使用します。

違いは、緑色の単語では ZWNJ が RTL で入力されているのに対し、赤色の単語では LTR で入力されていることです。

通常、ZWNJ をどのように入力するかはわかりませんが、ここでは、記号ダイアログの特殊文字ペインから「幅なしの省略可能な改行」を選択すると、ZWNJ は LTR で入力されます (この場合は不適切)。一方、記号ダイアログの文字テーブルから文字 0x200C を選択すると、RTL で入力されます (この場合は適切)。Word 2010 では、Word -> ファイル - オプション -> リボンのユーザー設定 -> キーボード ショートカット -> ユーザー設定... の順に選択し、幅なしの省略可能な改行にキーストロークを割り当てると、RTL テキストの入力時にそのキーストロークを押すと、ZWNJ が RTL として挿入されるように見えます (適切)。これは次のように割り当てることができます。

  • カテゴリのリストで、「一般的なシンボル」までスクロールして選択します
  • 表示される共通記号のリストで、「幅なしのオプションの改行」を選択します。
  • 「新しいショートカットキーを押す」ボックスをクリックします
  • 必要なショートカットキーを押します(私は実験としてCtrl+9を使用しました)
  • 割り当てをクリック
  • 閉じるをクリック

それで必要なことがすべて達成されるかどうかはわかりませんが、少なくとも何が起こっているのかは説明できると思います。

(私はそれがそのようなものだと疑っていましたが、.docx として保存して XML を確認する必要がありました。「緑の単語」は、「ラン プロパティ」RTL を持つ単一の Word「ラン」でエンコードされていました (ランは同じ特性を共有する文字のシーケンスであるため、テキストの色を変更すると新しいランが作成されます)。赤い単語は、テキストを含む 2 つの RTL ランと、ZWNJ 文字を含む非 RTL ランの 3 つのランとしてエンコードされていました。)

LTR ZWNJ を RTL のものに変更するには、次の VBA を使用できるはずです。(VBA を知っている人にとっては、これは Range ではなく Selection を操作する必要があるケースの 1 つです。私の知る限り、Run を RTL テキストに設定する唯一の方法は、Selection オブジェクトの RTLRun メソッドを使用することです)。

Sub replace_LTR_NBZWs_with_RTL_ones()

ActiveDocument.Select
With Selection.Find
  .ClearFormatting
  .Text = ChrW(8204)
  .Forward = True
  .Wrap = wdFindStop
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchKashida = False
  .MatchDiacritics = False
  .MatchAlefHamza = False
  .MatchControl = False
  .MatchByte = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  While .Execute
    Selection.RtlRun
  Wend
End With
End Sub

私の回答の原文は次のとおりです...

それはおそらくZWNJ です。これを選択してから、[挿入] -> [記号] -> [その他の記号] をクリックすると、ZWNJ (0x200C) が選択されます。これは、Microsoft が [記号] ダイアログの [特殊文字] ペインで「幅なしのオプションの改行」と呼んでいる文字と同じです。

私の知る限り、NotePad は ZWNJ を無視します。ZWNJ (それが ZWNJ である場合) をスペース (選択したスペース バーを押すと選択できるはずです) に置き換えて、NotePad が正しい文字形式を表示するようにする必要があると思います。

Word 文書内のあるポイントから別のポイントにコピーすると、ZWNJ が保持されるはずですが、実際に表示されているのはそれでしょうか?

答え2

今日、私は問題を解決する別の方法を見つけました。その方法は、NWOB (前後に文字がある) をそれ自体に置き換えることです。そうすれば、Word がうまく機能します...

  • 検索対象:(?)^o(?)
  • と置換する:\1^o\2
  • パネルUse wildcardsの横にチェックマークを入れるのを忘れないでくださいMore >>

すると、LTR ZWNJ が長方形のようなモードに変更され、RTL の ZWNJ が期待どおりに変更されます。

関連情報