패키지를 작성할 때 바벨 활성 문자를 처리하는 방법은 무엇입니까?

패키지를 작성할 때 바벨 활성 문자를 처리하는 방법은 무엇입니까?

패키지 에서는 bodeplot(그래픽 외부화 문제를 피하기 위해 이렇게 정의됨 tikz) 을 사용하여 새로운 환경을 정의했습니다.

\documentclass{standalone}
\usepackage{pgfplots,xparse}
\pgfplotsset{compat=1.18}
\NewDocumentEnvironment{MyEnv}{O{}mm+b}{
  \begin{tikzpicture}
    \begin{semilogxaxis}[xmin={#2},xmax={#3},ymin=0,ymax=1]
      #4
    \end{semilogxaxis}
  \end{tikzpicture}
}{}

사용자가 새로운 환경을 사용하여 이와 같은 작업을 수행할 수 있기를 바랍니다.

\begin{document}
  \begin{MyEnv}[]{1e-1}{1e4}
    \draw[thick,blue,dashed] (axis cs:1,0) -- (axis cs:100,1);
    \addplot[variable=t,domain=1e-1:1e4] gnuplot {(t>100)?0.2:0.5};
  \end{MyEnv}
\end{document}

이 모든 것은 영어 문서에 적용됩니다. 그러나 사용자가 babel일부 문자를 활성화하는 언어를 사용하면 #4문서를 컴파일할 수 없습니다. 예를 들어 추가하면

\usepackage[french]{babel}
\usetikzlibrary{babel}

서문에 컴파일 오류가 발생합니다.

frenchbsetup나는 그것을 확인 하고 사용하여 프랑스어 작업에 적합하도록 만들었습니다.

\AddToHook{env/MyEnv/begin}{\shorthandoff{;:!?}}

감지된 경우. 그러나 모든 언어의 모든 활성 문자에 대해 이와 같은 작업을 수행하는 것은 이 문제를 해결하기 위한 잘못된 접근 방식처럼 보입니다.

에서 지원하는 모든 언어에서 작동하는 이와 같은 매크로의 활성 문자를 감지하고 관리하는 더 좋은 방법이 있습니까 babel?

답변1

catcode를 어떻게 처리하는지 잘 모르겠지만 tikz어떻게든 기본값인 12('기타')로 변경해야 한다고 가정합니다. 유일한 방법은 \shorthandoff(또는 낮은 수준 \catcode)을 사용하는 것입니다.

\dospecials그러나 아마도 다음 아이디어가 도움이 될 것입니다. '특수' 문자를 저장하는 매크로가 있고 babel여기에 약칭을 추가합니다. 매크로로 저장되기 때문에(즉, ;로 저장됨 \;) 실제 문자를 얻으려면 몇 가지 트릭이 필요합니다. 그런 다음 다음을 사용할 수 있습니다 \ifbabelshorthand.

\documentclass{article}

\usepackage[french]{babel}

\makeatletter
\let\shorthandlist\@empty
\def\do#1{%
  \begingroup
    \lccode`\~=`#1\relax
    \lowercase{\ifbabelshorthand~{\g@addto@macro\shorthandlist{~}}{}}
  \endgroup}
\dospecials
\makeatother

\show\shorthandlist

->~:;!?.의해 추가된 문자를 제거하면 가 표시됩니다 . 당신에게는 효과가 없을 수도 있지만 적어도 나는 시도했습니다.\show~:;!?

관련 정보