![MS Word の非表示の書式記号](https://rvso.com/image/1395380/MS%20Word%20%E3%81%AE%E9%9D%9E%E8%A1%A8%E7%A4%BA%E3%81%AE%E6%9B%B8%E5%BC%8F%E8%A8%98%E5%8F%B7.png)
ペルシア語の 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 が期待どおりに変更されます。