WinEdtの正規表現:未使用の数値を含む数式を見つける

WinEdtエディターのマニュアル(LaTeXドキュメントの作成のみを目的としています)の詳細を知り、このプログラムの検索/置換ツールの可能性を広げました。 スマート検索を有効にするには、[検索]または[検索と置換]メニューの[正規表現]チェックボックスをオンにする必要があります。その結果、検索文字列は実際にコマンドラインに変わり、驚異的な作業が可能になります。 つまり、テキストでほとんど何でもできるようになります。別の質問は、時にはあまりにもひねくれていることです(したがって、深刻なタスクの場合、対応するマクロの作成がより適切に見えます)。



婦人科医についての冗談
婦人科医が車のサービスに就職します。 彼はエンジンの分解、組み立てを依頼されます。 彼はパフォーマンスを行い、自分の作品を評価することに興味があります。 彼らは彼に答えます:「原則として、何もありません。今や、このすべてが排気管を通して行われるのは初めてです。」


例を挙げましょう。 すべての未使用のラベル\ラベル、つまり、作品のテキストに単一の参照リンクがないラベル(英語のマニュアルに記載されている、参照されないすべてのラベル)を見つける必要があります。 特別なマークは、それ自体は無害ですが、特にlatekh文書の式の過剰な「番号付け」について(つまり、未使用の数字を含む式の存在について)通知できます。 テキストが十分に大きく、番号付きの関係が多数ある場合、そのようなラベルの外観はほとんど避けられません(この式を参照した後、リンクを削除してテキストを変更し、ほとんどの場合、式から番号を削除するのを忘れました)。 同時に、「再度」タグを手動で検出すると、(再び、大量の材料が原因で)面倒で、最も重要なのは、機械的な作業になり、その性質は単純に合理的な代替手段を求めます。



したがって、WinEdtエディターの「スマート」検索を使用してタスクを解決します(バージョン5.3で十分なはずです)。 まず、WinEdtはユーザーのニーズに合わせて名前%!0、...、%!9のメモリセル(レジスタ)を予約していることに注意してください。 さらに、このメモリは、WinEdtを再起動するたびにリセットされるという意味で、本質的に動作可能であることに留意する必要があります。 このメモリを使用して、すべての\ refリンクの内容を1つの長い行として保存します。ctrl+ Fを押します。開いたメニューの[正規表現]チェックボックスのチェックマークを忘れないでください。



\\ref\(\{*\}\)\X{\"|GetTag(0,0);LetReg(1,"%!1%!0");|}
      
      









いくつかの説明(最後の行の意味を部分的に明らかにする)。 正規表現モードがオンの場合、一部の文字(たとえば、\、{and})は正式な意味を持ちます。 それらを直接の意味で(つまり、対応する文字として)必要とする場合は、スラッシュ(たとえば、\\、\ {および\})と一緒に使用する必要があります。 ただし、例外があります。たとえば、括弧自体は正式な文字ではないため(文字通り括弧を意味します)、\(および\)の組み合わせでは、逆に特別な意味を持ちます。 \(および\)で囲まれたテキストは、いわゆるタグ(タグ式またはマークされたテキスト)になり、将来使用できます:このテキストへのアクセス(たとえば、同じ検索行で繰り返しフラグメントを見つけるか、行 " \)コマンドを使用して、 ")に置き換えます(ゼロはタグ付きフラグメントのデフォルト番号です)。 複数の部分を強調表示する必要がある場合は、フォームの構造を使用する必要があります。



 \(0 -  \), …, \(9 -  \)
      
      





コマンド\ 0、...、\ 9は、対応する部分を参照します。



入力されたテキストの先頭にある\ {と\}の間のアスタリスク*は何ですか? このアスタリスクはパターンと呼ばれ、1行内の任意の文字シーケンス(空を含む)を意味します(WinEdt 5.3以降、**の組み合わせは改行を含む任意のテキストをエンコードします)。



したがって、文字セット:



 \\ref\(\{*\}\)
      
      





つまり、問題の式の最初の部分は、\ ref {任意のテキスト}という形式の任意の組み合わせを検索します。 このような組み合わせが検出されると、\ Xで始まる式の2番目の部分から明らかなように、マクロが開始されます(マクロ開始コマンドがない場合、WinEdtは見つかった組み合わせに移動し、ドキュメントのテキストでそれを強調表示します)。 さらに、マクロ起動コマンドは\ xで開始できます(レジスタが重要です!)、\ Xxおよび\ xXでも開始できます。 実際には、マクロの実行結果に応じて、WinEdtは見つかったフラグメント(この場合は\ ref {任意のテキスト})に移動し、(検索行で指定されたものとは異なるかのように)無視することができます次の一致を検索します。 そして、これら2つの選択肢のうちどちらが好まれるかは、「xコマンド」のレジスタと、WinEdtが使用するブール変数IFOKの値(デフォルトではtrueに等しい)によって決まります。 \ Xコマンドの場合、WinEdt応答はIFOK値と一致します。IFOK値がtrueの場合、WinEdtは見つかったフラグメントに移動します。 falseの場合、WinEdtはこのフラグメントを無視します。 \ xコマンドの場合、IFOK値に対するWinEdtの反応は正反対であり、\ Xxまたは\ xXを使用すると、WinEdtはIFOK値に関係なく検出されたテキストを表示します。



分析された文字列の2番目の部分、つまりコマンドをさらに詳しく考えてみましょう:



 \X{\"|GetTag(0,0);LetReg(1,"%!1%!0");|}
      
      





GetTag(0,0)とLetReg(1、 "%!1%!0")の2つのマクロを実行します。 GetTag(n、m)マクロは、n番目のタグ(この場合はnullタグ、つまり\ refコマンドの引数とその中括弧)の内容をm番目のレジスター、つまり名前のあるメモリセルに書き込みます%!m(この場合、名前は%!0)。 LetReg(k、 "string")マクロは、2番目の引数をk番目のセルに書き込みます(引用符は付けません)。 この場合、LetRegは最初のレジスタを上書きし(最初は何もありません)、0番目のレジスタの内容、つまり、WinEdtが検出した\ refコマンドで中括弧で囲まれた引数を追加します。 したがって、%!0セルにテキスト内で見つかったすべての\ refコマンドの引数のシーケンスを入力するには、検索行に入力します。



 \\ref\(\{*\}\)\X{\"|GetTag(0,0);LetReg(1,"%!1%!0");|}
      
      





文書全体に目を通します。 これは比較的簡単かつ迅速に行われます。特定のテキストが最初に正常に検出された後、F3キーを押したままにして以降のすべての出現を検索します(数百の番号付き比率を含むドキュメントの場合、F3を保持するのに30秒もかかりませんでした)。 ただし、代替オプションがあります。WinEdtエディター置換ツールを使用できます。ctrl+ Rを押して、検索バーに入力します。



 \\ref\(\{*\}\)\X{\"|GetTag(0,0);LetReg(1,"%!1%!0");|}
      
      





「置換」の行:



 \ref\(\{*\}\)
      
      





置換の確認を求められたら、[すべて]を選択して進みます([正規表現]チェックボックスのチェックマークを忘れないでください)。



準備作業が完了しました。 次の式を使用した検索呼び出しによって、未使用のラベルの検出が実行されるようになりました。



 \\label{\{\(*\)\}}\x{FindInString("%!1","\0");}
      
      





検索バーで(\ xc IFOK!接続を思い出してください)。 引数付きで検索:



 \\label{\{\(*\)\}}\X{FindInString("%!1","\0");}
      
      





反対の問題を解決し、少なくとも1つのrefコマンドの引数に表示されるラベルのみを表示します。 式に外部中括弧が存在することに注意してください:\\ label {\(\ {* \} \)}、しかし、それらが欠落している場合、WinEdt検索は、一般的に言えば、誤った結果を与えます。 この機能には合理的な説明はありません-覚えておく必要があります(英語版のマニュアルでは、{\ {\(* \)\}}を使用することが重要であると記載されています。 )



グルジアの学校についての冗談
グルジア語学校でのロシア語のレッスンの先生:「子供たち、覚えておいてください:塩、豆、麺の言葉は柔らかい記号で書かれ、フォーク、バルク、プレートの言葉はありません。 これは不可解であり、覚えておく必要があります!」


また、%!0および%!1レジスタに書き込むときのref-commandsの引数を囲む中括弧は、厳密には必要ではありませんが、次のような場合にエラーを回避できるため、非常にお勧めです。



 \label{h1}\label{h2}\label{1h}\label{h3}\ref{h1}\ref{h2}\label{h}
      
      





(構文\\ ref \(\ {* *}}の代わりに)zipフラグメントに{and}を含めずに\\ ref \ {\(* \)\}を使用する場合、リンクの内容は次の行を形成します:h1h2 hおよび1hという名前のラベルの使用に関して誤った結果をもたらします。 ただし、ラベルとリンク自体の引数には(もちろん、ペアワイズの方法で)中かっこ(たとえば、\ label {h {1}})が含まれている可能性があるため、これはすべての可能性のあるエラーを軽減しません。 誤解を完全に排除するための最も簡単な方法は、リンクの命名時に中括弧の使用を放棄することです。 名前にこれらの括弧が含まれる信じられないほどの数のリンクを含む巨大なドキュメントを作成した場合、おそらく特別なマクロなしではできません。



そのため、ここで説明する方法では、(上記の注意事項を使用して)数値を生成する環境(方程式など)に未使用の\ラベルが含まれるすべてのケースを検出できます。 ただし、そのような環境に\ラベルがまったく含まれていない場合でも、「余分な」番号が表示される場合があります。 幸いなことに、高度な検索エンジンWinEdtを使用すると、簡単に検出できます(フィールドの検索)。



 \\begin\{equation\}\(**\)\end\{equation\}\x{FindInString("\0","\label");}
      
      





さらに修正する(フィールドに置き換える):



 \begin\{equation\*\}\0\end\{equation\*\}
      
      





そのようなすべての誤解(明確にするために、上記の方程式環境のケースが考慮されました)。



All Articles