Tikz の Babel ライブラリが特定の条件下で動作しない

Tikz の Babel ライブラリが特定の条件下で動作しない

「quotes」ライブラリの機能を使用すると、最初はエラーが発生しました。

Babel の言語を「ブラジル」から「英語」に変更したところ、動作しました。

修正を試みて、「babel」ライブラリを見つけ、それを使用したところ、「通常」のケースでは機能しましたが、私が定義したマクロ内では機能しませんでした。

基本的には、次のように動作します。

  1. 英語 + (引用パッケージなし) = すべてのケースに有効
  2. ブラジル語 + (引用パッケージなし) = 機能しません
  3. 英語 + (引用パッケージ) = すべてのケースに有効
  4. brazilian + (quote package) = はマクロの外部では機能しますが、内部では機能しません。

最小限の動作例:

\documentclass[brazil]{standalone}
\usepackage{tikz,babel}
\usetikzlibrary{babel,angles,quotes}

\newcommand\fig[1]%
{\begin{tikzpicture}#1\end{tikzpicture}}%

\begin{document}

\fig{\coordinate (a) at (3.75,3.75);
  \coordinate (b) at (3.75,0.75);
  \coordinate (lo) at (0, 0.75);
  \draw[thick,blue] (0, 0.75) -- (3.75, 3.75);
  \pic [draw, -,thick,"$\theta$", angle radius=1cm, angle eccentricity=1.3] {angle = a--lo--b};}

\end{document}

「ブラジル」言語に設定すると失敗しますが、英語に設定すると動作します。

答え1

この問題はgermanbabel

理由は、コマンドの引数が\fig正しいcatcodesで読み込まれていないためです。tikzライブラリは、すべての環境babelの開始時にいくつかのcatcodesを通常の値にリセットしますが、tikzpicture\figが読み取られます。

解決策は、マクロ内でのみ catcode を設定する方法はありますか?

コマンド\figは で始まります\begingroup。次に の catcode を設定します"。この catcode が変更された後にのみ、 コマンドが実行されます。の\figaux最後にが配置されます。\figaux\endgroup

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

\documentclass[brazil]{standalone}
\usepackage{tikz,babel}
\usetikzlibrary{babel,angles,quotes}
\newcommand{\fig}{\begingroup\catcode`"=12 \figaux}
\newcommand{\figaux}[1]{\begin{tikzpicture}#1\end{tikzpicture}\endgroup}
\begin{document}
\fig{\coordinate (a) at (3.75,3.75);
  \coordinate (b) at (3.75,0.75);
  \coordinate (lo) at (0, 0.75);
  \draw[thick,blue] (0, 0.75) -- (3.75, 3.75);
  \pic [draw, -,thick,"$\theta$", angle radius=1cm, angle eccentricity=1.3] {angle = a--lo--b};}
\end{document}

関連情報