Tikz의 바벨 라이브러리가 특정 조건에서 작동하지 않습니다

Tikz의 바벨 라이브러리가 특정 조건에서 작동하지 않습니다

"인용문" 라이브러리의 기능을 사용하면 처음에는 오류가 발생했습니다.

나는 바벨의 언어를 "브라질"에서 "영어"로 변경했고 작동했습니다.

나는 문제를 해결한 후 "babel" 라이브러리에 대해 알게 되었습니다. 그것을 사용했기 때문에 "일반적인" 경우에는 작동했지만 내가 정의한 매크로 내부에서는 작동하지 않았습니다.

기본적으로 이것이 작동하는 방식입니다.

  1. 영어 + (견적 패키지 없음) = 모든 경우에 작동
  2. 브라질 + (견적 패키지 없음) = 작동하지 않음
  3. English + (인용 패키지) = 모든 경우에 적용 가능
  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

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}

관련 정보