Claude Media
Claude CodeのVS Code拡張で数式が整形されない原因と直し方

Claude CodeのVS Code拡張で数式が整形されない原因と直し方

VS Code拡張のチャットパネルで数式が整形される条件と、$…$が生のまま残る原因を、拡張のバージョン・ターミナルモード・数字始まりの式などの順に切り分けます。

VS Code拡張のチャットパネルは、Claudeの返答に含まれるLaTeXの数式を、組版した数式として表示できます。ただし条件があり、満たさない式は $…$ や \(…\) のまま残ります。Claude Code(拡張)のバージョンが2.1.301未満の場合と、ターミナルモードで使っている場合は、すべての式が整形されません。一部の式だけが生のまま残るなら、式の書き方に原因があります。

数式が整形される条件はバージョンと表示モード

数式の整形には、Claude Code v2.1.301以降が要ります。このバージョンで追加された機能なので、古い拡張では何を頼んでも整形されません。変更点の全体はClaude Code v2.1.301のリリースノートにあります。

もう一つの条件が表示モードです。チャットパネルでは整形されますが、ターミナルモードでは、バージョンに関係なく整形されません。ターミナルモードは設定 claudeCode.useTerminal を有効にしたときの表示で、既定はオフ(グラフィカルなチャットパネル)です。

手順

全部の式が生のままのときの確認順

  1. 1

    拡張のバージョンを見る

    VS Codeの拡張機能ビューで、Claude Code拡張のバージョンが2.1.301以上かを確かめます。

  2. 2

    ターミナルモードを切る

    設定のExtensions > Claude CodeにあるUse Terminalのチェックを外します。Cmd+,(WindowsとLinuxは Ctrl+,)で設定を開けます。

  3. 3

    新しい会話で式を出させる

    下の「整形されるかを確かめる依頼」を送り、表示を見ます。

設定を settings.json で直接書くなら、次の1行です。

{
  "claudeCode.useTerminal": false
}

設定項目の置き場所はVS Code拡張の設定ガイドにまとめています。

整形の対象になる書き方

チャットパネルが数式として扱う書き方は、ブロックと行内の2系統です。

種類書き方備考
ブロック書き方$$ … $$備考単独の行(複数行も可)に置く
ブロック書き方\[ … \]備考単独の行(複数行も可)に置く
ブロック書き方math を言語にしたコードブロック備考他の言語のコードブロックは対象外
行内書き方$…$備考同じ行で開いて閉じる
行内書き方\(…\)備考同じ行で開いて閉じる

行内の式は、1行の中で閉じていることが前提です。開き側と閉じ側が別の行に分かれると、整形されません。

全部ではなく一部だけ生のままになる原因

同じ返答の中で、ある式は整形され、隣の式は生のまま、という状態もあります。パネルは、数式に見えるものと、同じ記号を別の用途で使っているものを見分けようとします。その判定や上限に引っかかると、その式だけが書いたとおりに出ます。

数式ではなく言葉に読める

$O(n log n)$ のように、言葉として読める中身は整形されません。計算量の表記は、この型に当たりやすい代表例です。

数字で始まる $30$ や $1/N$ も、そのままです。例外は、=、+、^ のように数式だと示す文字を含む場合です。$30 + 5$ なら数式として扱われます。

なお、$HOME のような環境変数、$5 のような金額、sed 's/\(foo\)/\1/' のようなコマンドも、わざと整形されません。コードスパンやコードブロックの中も同じです。シェルの例を含む返答で式が崩れないのは、この判定のおかげです。

余白が入っている、長い、行をまたぐ

次の書き方は、$…$ では整形されません。

  • $ x^2 $ のように、ドルの内側に空白がある
  • $…$ の中身が60文字を超える
  • $…$ や \(…\) が2行に分かれている

TeXとして処理できない

構文エラーのある式、\newcommand や \def のようなマクロ定義、エスケープしていない % を含む式は、書いたとおりに出ます。% は \% と書き直せば通ります。

式が大きすぎる、数が多い

1つの式が8,192文字を超える場合や、ソースよりずっと大きく描画される式は、整形されません。また、返答内の1つのテキストブロックでは、式を順に整形していき、上限を超えた分から後ろは生のままです。

一番確実な回避は$$ブロックに出させること

数字で始まる式、空白入りの式、長い式、行をまたぐ式のいずれも、$$ ブロックなら整形されます。$$ を単独の行に置いたブロックは、上で挙げた「言葉に読める」判定や、60文字・空白・行またぎの制限を受けません。

そこで、返答に数式が多い作業では、最初から $$ を使うよう頼んでおく方法があります。リポジトリの CLAUDE.md に、次のような一文を足す形です。

## 数式の書き方
 
- 数式は `$$` を単独の行に置いたブロックで書く
- 数字で始まる式や長い式を、行内の `$…$` で書かない

行内の式を完全にやめる必要はありません。$E = mc^2$ のように、= や ^ を含む短い式なら、行内でも整形されます。ブロックに寄せるのは、生のまま残った式を直したいときと、式が長い教材やノートを作るときです。

整形されるかを確かめる依頼

表示の確認は、1回の依頼で済ませられます。次のようなプロンプトを新しい会話で送ります。

次の4つを、それぞれ別の行に、書き方を変えずに書いてください。
1. $E = mc^2$
2. $30$
3. $O(n log n)$
4. $$
   \sum_{i=1}^{n} i = \frac{n(n+1)}{2}
   $$

ドキュメントの説明どおりなら、1と4は整形され、2と3は生のまま残ります。ここで1も4も整形されないなら、バージョンかターミナルモードの問題です。2と3が整形されているなら、拡張側の判定が変わっている可能性があるので、使っているバージョンを確かめます。

生のまま残った式を整形させる頼み方

原因ごとに、Claudeへの頼み方を変えると直りが早くなります。

生のままになった理由頼み方
数字始まり・言葉に見える・長い・空白入り・行またぎ頼み方その式を $$ ブロックで書き直してもらう
TeXの構文エラー・マクロ・%頼み方エラーを直す、マクロを使わない、% を \% にする
8,192文字超・大きすぎる頼み方式を小さく分ける、または短く書く
式が多く、後ろの式が出ない頼み方必要な式だけを単独でもう一度送ってもらう

コピーしたときに手に入るのはTeXソース

整形された式を選択してコピーすると、描画された記号ではなく、$…$ または $$…$$ で囲まれたTeXソースが取れます。Copy responseボタンと /copy コマンドは、返答をClaudeが書いたとおりに、TeXソースを含めてコピーします。

論文やノート、READMEに貼る式は、画面を見て打ち直す必要がありません。そのままLaTeXの文書やMarkdownに貼れます。

Desktopや他の面との違い

この記事の条件は、VS Code拡張のチャットパネルの話です。Claude Desktopで行内の数式が出ない問題は、原因も直し方も別で、Claude Desktopのインライン数式の記事で扱っています。Claude.aiで数式ノートを作る手順なら、数式ノートをLaTeX表示のまま作る方法があります。

パネルそのものが固まる、返事が来ないといった別の症状は、拡張が応答しないときの切り分け手順を先に見てください。

数式の確認中に取り違えやすいパネルの症状

数式の表示を確かめている最中に、式が出ない原因をパネルの不調と取り違えることがあります。ここでは、数式が整形されないように見える、または同じバージョン条件で直る症状を挙げます。

パネルが固まる、「Something went wrong」だけが出る

リロードして会話が戻るたびにパネルが固まる、クラッシュする、Something went wrong だけが表示される。この症状は、拡張をv2.1.301以降に更新し、ウィンドウをリロードするかVS Codeを再起動すると収まる、と案内されています。数式の整形に必要なバージョンと同じなので、数式が整形されない環境では、この症状も同時に出ていないかを見ておく価値があります。

2回続けて会話を開き終えられなかった場合、パネルはその会話の代わりに新しいチャットを開きます。更新しても直らないときは、先に挙げた切り分け手順で原因を絞れます。

再開した会話の中身が最初は空白

過去の会話を再開した直後や、リロードで会話が戻った直後は、メッセージが空白のまま見えることがあります。会話用のプロセスが起動するまでの間で、約1秒後に空白の場所へ Waiting for your plugins… と出ます。

何もする必要はありません。プロセスが起動して、プラグインの確認が不要だと分かった時点でメッセージが現れます。起動に時間がかかる場合でも、20秒たてば表示されます。空白を見て拡張を入れ直したり、設定をいじったりすると、待つだけで済んだものを遠回りすることになります。

「was not reopened」と出て新しいチャットになる

リロード後に、入力欄の上へ「〜 was not reopened. It did not finish opening the last 2 times」という通知が出て、会話の代わりに新しいチャットが開くことがあります。直近2回、その会話が開き終わらなかったためにパネルが閉じたままにした、という意味です。

開き終わらないのは、会話を読み込む間にパネルがクラッシュしたり応答しなくなったりしたとき、または、開いてから約3秒以内にウィンドウをリロードしたり閉じたりしたときです。会話そのものは変わらず、セッション履歴に残っています。

  • 開き直す: Open it anywayをクリックするか、セッション履歴から選ぶ。開いてパネルが動き続ければ、以後のリロードでも通常どおり戻ります。また固まるなら、ウィンドウをリロードすると新しいチャットと通知に戻ります
  • 閉じたままにする: 新しいチャットで作業を続ける。プロンプトを送ると通知は消えます

プラグインがパネルに描いたもの

見慣れない枠やステータス表示がパネルに現れたら、プラグインが描いている可能性があります。モッド(拡張機能の機能追加)を含むプラグインは、会話の横か上に出るペイン、入力欄の上のトースト通知やステータスライン、メッセージやツール呼び出しの独自表示を描けます。描画には、拡張のv2.1.299以降と、フィーチャーフラグを取得するセッションが要ります。

プラグインが描いたものには、出どころを示すラベルが付きます。「From the token-chart plugin」はプラグインが描いた、または表示したもの、「Edited by the token-chart plugin」はClaude Codeの描画をプラグインが書き換えたもの、「Prompt from the token-chart plugin」はプラグインがあなたの代わりに送ったメッセージです。ラベルで出どころが分かれば、止めたいときはプラグインのダイアログでそのプラグインをオフにします。

まとめ

全部の式が生のままなら、疑うのはバージョンと claudeCode.useTerminal の2点です。一部だけ生のままなら、数字始まりの式や $O(n log n)$ のような言葉に見える式が典型で、$$ ブロックに書き直してもらえば整形されます。数式を多用する作業では、CLAUDE.md に $$ ブロックの方針を置いておくと、生のまま残る式をあらかじめ減らせます。

この記事を共有:XはてブLinkedIn