$$ ... $$を [... ]のように動作させることはできますか?



Can I Get Behave Like



解決:

これは間違いなく物議を醸す答えになるでしょうが、ここでは何も起こりません!1

あなたが求めていることは、その前提に欠陥があります:あなたが変更したい場合$$ ... $$のように振る舞う [... ]変更する必要があるのはLaTeXではなく、TeXです。 LaTeXはの動作を変更しませんTeX定義からの$$。



すべてのこと [... ]はラッパーです$$ ... $$は、いくつかのモードチェックを実行し、いくつかの拡張エラーレポートを提供し、段落の先頭に表示が発生する場合はいくつかの間隔を変更します。完全な定義は、ソースおよび/または$$、 [、align、equation、displaymathの違いは何ですか?に対する受け入れられた回答で確認できます。

そのため、LaTeXはPlain TeXの基本を採用し、推定大多数のユーザーのユースケースをカバーするように拡張しました。 LaTeXが提供する他のマクロと何ら変わりはありません。TeXが提供するビルディングブロックの拡張です。



私の意見では、あなたがの行動をしたい場合 [... ]、単に使用する [... ]。再定義$$は、おそらく技術的には可能ですが、目的の動作を定義するコマンド自体が内部で使用するため、重要です。さらに、古い機能に依存しているドキュメントの数(設計が不適切な場合もありますが、それでも)はわかりません。


1私のビールを持ってて!


これがあなたの挑戦に対するLuaLaTeXベースのソリューションです。



Lua関数replace_ddollarは実際には再定義しません$$プリミティブ。代わりに、処理の非常に早い段階で入力テキストをスキャンします( TeXの「目」は何かを始めます)そしてのすべてのインスタンスを置き換えますどちらかで$$[ また]。 Luaコードは次のようなコードを処理できます

$$ a ^ 2 + b ^ 2 = c ^ 2 $$

NS。、 マッチしたペア1行の$$ディレクティブ、および方程式の通常の入力形式。

$$ E = mc ^ 2 $$

述べる :まさにその理由$$は いいえ このアプローチで再定義されているため、ドキュメントに次のインスタンスが含まれていると、問題が発生する可能性があります。$$は いいえ display-mathモードを開始または終了するために使用されます。そのようなインスタンスのいくつかの例:

  • の比類のないインスタンスコメント内の$$(含むコメントのような環境)
  • のインスタンス逐語的な環境での$$
  • のインスタンスに囲まれたURL文字列の$$ url {...}ディレクティブ

(問題が発生する可能性はまだまだあると思います。)ドキュメントにそのようなインスタンスがある場合に備えて、以下のコードはマクロを提供します ReplaceDoubleDollarOffは、Lua関数の操作をオフにしますreplace_ddollar。と呼ばれるコンパニオンマクロもあります ReplaceDoubleDollarOn、Lua関数をオンに戻します。

の単一インスタンスのインスタンスによってもたらされるリスクdisplaymathモードを開始または終了することを意図していない入力行の$$は、displaymathモードを開始または終了することになっている$$は、行の先頭で発生します。この仮定が有効な場合は、2番目の検索文字列を単純に減らします。string.gsub関数、'%$%$'、'^%$%$'。 NS^文字は、一致が発生する可能性があるのは次の場合のみであることを示します$$は、行の先頭で発生します。 [Luaコードに含まれている理由に興味がある場合だけでなく%$%$$$:ルアでは、$文字は「特殊」であり、エスケープする必要があります(接頭辞として%記号)実際のことを示すため$記号。]

ここに画像の説明を入力してください

%!TEX TS-program = lualatex  documentclass {article}  usepackage {luacode}%for'luacode 'environment  begin {luacode}
in_display_math = false function replace_ddollar(line)line = string.gsub(line、 '%$%$(.-)%$%$'、 '\ [%1 \]')line = string.gsub(line、 '%$%$'、関数(x)in_display_mathでない場合はin_display_math = true return '\ [' else in_display_math = false return '\]' end end)return line end
 end {luacode}  newcommand  ReplaceDoubleDollarOn {% directlua {luatexbase.add_to_callback( 'process_input_buffer'、replace_ddollar、 'replace_ddollar')}}  newcommand  ReplaceDoubleDollarOff {% directlua {luatexbase.remove_from_callback( 'process )}}  ReplaceDoubleDollarOn%置換関数がオンになっている usepackage {url}%この例のためだけに begin {document} $$ E = mc ^ 2 $$ $$ a ^ 2 + b ^ 2 = c ^ 2 $$ $ $ d ^ 2 + e ^ 2 = f ^ 2 $$%余談ですが、私はこのコーディングスタイルを支持していません! $$ x = 3  alpha ^ 2 +  beta =  int f 、d  mu。 $$%ダブルドルの置換をオフにする ReplaceDoubleDollarOff  url {A_URL_string_with_a _ $$ _ and _ $$ $$ _ and_another _ $$}%ダブルドルの置換をオンに戻す ReplaceDoubleDollarOn $$ e ^ {i  pi} -1 = 0 $$ $$ 1 + 1 = 2 $$  end {document} 

これはおそらく最も簡単な実装です。まだ強調したい いいえ このようなコードを使用します。それは最初からうまくいかないか、さらに悪いことに、ドキュメント内の何かを変更したいときに、エラーが発生して、 item(または数学モードとは関係のない何か)、そしてすべてが壊れるので、ドキュメント全体を再コーディングする必要があります。

 documentclass {article}% usepackage [fleqn] {amsmath}%は、たとえば let  dollar = $  catcode` $ =  active  makeatletter  protected  def $ { @ ifnextchar $ { @ doubledollareqn} {でも機能します。  @singledollareqn}}  def  @ singledollareqn#1 $ {(#1 )}  def  @doubledollareqn $#1 $$ { [#1 ]}  makeatother  begin {document}インライン計算$ x ^ 2 + y ^ 2 = z ^ 2 $。 $$ f(v)= 4  pi  left( frac m {2  pi kT}  right)^ { frac32} v ^ 2e ^ {- frac {mv ^ 2} {2kT}}。 $$  end {document}