Tikz 的 babel 库在某些情况下不起作用

Tikz 的 babel 库在某些情况下不起作用

使用“quotes”库中的功能最初给我带来了错误。

我将 babel 的语言从“巴西语”改为“英语”,并且成功了。

我去修复后,发现了“babel”库;使用了它,因此它适用于“正常”情况,但不适用于我定义的宏。

基本上,事情的运作方式如下:

  1. 英语 + (无报价包)= 适用于所有情况
  2. 巴西 + (无报价包) = 不起作用
  3. english + (quote package) = 适用于所有情况
  4. 巴西 + (引用包) = 在宏之外有效,但在宏之内无效。

最小工作示例:

\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

german该问题也适用于 的选项babel

原因是命令的参数\fig没有用正确的 catcode 读取。tikzbabel在每个环境开始时将一些 catcode 重置为其正常值,但在此之前读取了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}

相关内容