노드 이름의 쉼표

노드 이름의 쉼표

내 데이터베이스에는 일부 개체의 이름 A,B형식이 있습니다. 즉, 그 사이에 쉼표가 있습니다. 이런 걸 하고 싶었어요

\node (A,B) {Comma};
\node (x) {normal};
\draw (A,B) -- (x);

그러나 이는 허용되지 않습니다. 노드 이름에 쉼표를 사용하거나 일반적으로 노드 이름에 다른 특수 문자를 사용하려면 어떻게 해야 합니까?

답변1

TikZ가 다음과 같은 테스트를 수행하기 때문에 할 수 없습니다.좌표 표현에 콜론이 포함되어 있나요? 그런 다음 angle:radius polar 구문으로 이동합니다. 점이 포함되어 있나요? 그런 다음 (노드 이름.각도) 구문 등으로 전환합니다.

이러한 구문 분석의 코드 조각은 다음과 같습니다.

\pgfutil@in@:{#2}%
\ifpgfutil@in@
  \let\@next\tikz@parse@polar%
\else%
  \pgfutil@in@,{#2}%
  \ifpgfutil@in@%      
    \let\@next\tikz@parse@regular%
  \else%
    \let\@next\tikz@parse@node%

그것이 무엇을 하는지는 중요하지 않지만 어떤 결정이 내려지고 있다는 것을 느낄 수 있습니다. 따라서 쉼표나 기타 구두점을 피하는 것은 너무 번거롭고 코드를 매우 취약하게 만들 수 있습니다.

답변2

(매우 비추천)

귀하가 요청했고 필요할 수도 있으므로 이 경우 catcode 변경을 시작할 수 있습니다.

\catcode`\,=11

그러나 우리는 일련의 문제에 직면하고 있으며, 그런 경우에도 특별한 주의가 필요한 쉼표 관련 상황을 발견하게 될 것입니다. 그 이유는 쉼표가 매개변수 목록과 점좌표 구분 기호로 사용되기 때문입니다. 따라서 그룹을 사용하여 최대한 사용을 제한하고 있습니다.

이 예에서와 같이 또는 { }를 사용 하여 하나의 명령 또는 여러 명령을 제한할 수 있습니다 .\begingroup\endgroup

\begingroup
\catcode`\,=11
\node (A,B) {Comma};
\endgroup

하나의 특정 환경을 제한할 수 있습니다 tikzpicture.

\begingroup
\catcode`\,=11
\begin{tikzpicture}
\node (A,B) {Comma};
\end{tikzpicture}
\endgroup

또는 tikzpicture다음과 같은 모든 환경에서도 마찬가지입니다.

\tikzset{every picture/.style={execute at begin picture={\catcode`\,=11}}

다음은 하나의 TikZ 환경을 제한하는 예입니다.

\documentclass{article}
\usepackage{tikz}
\begin{document}
% All environments wrapper...
%\tikzset{every picture/.style={execute at begin picture={\catcode`\,=11}} 
% One environment wrapper...
\begingroup
\catcode`\,=11
\begin{tikzpicture}
% One line wrapper...
%\begingroup
%\catcode`\,=11
%\node (A,B) {Comma};
%\endgroup
\node (A,B) {Comma};
\node[xshift=3cm] (x) {normal}; 
% It is not working when we add ", draw".
%\draw (x) -- (1cm,2cm);
%\draw (A,B) -- (x); % We cannot use "-- (1cm,2cm)".
\end{tikzpicture}
\endgroup
\end{document}

또한 TikZ 도구를 사용하여 특정 영역을 제한하고 해당 영역에 쉼표를 직접 사용하는 것을 피할 수 있습니다. 왜냐하면 매개변수 목록(예: ) [xshift=3cm,draw]과 한 쌍의 점 좌표(예: )를 수정하고 있기 때문입니다 (1cm,2cm).

첫 번째 경우에는 제한 그룹 외부에서 스타일을 정의할 수 있습니다. 예를 들면 다음과 같습니다.

\tikzset{mystyle/.style={xshift=3cm,draw}}

두 번째 경우에는 \coordinate다음과 같은 명령을 사용할 수 있습니다.

\coordinate (myright) at (1cm,2cm);

\pgfmathparse{pow(2,4)}아마도 에서와 같이 주의가 필요한 다른 상황에 직면하게 될 것입니다 . 다음은 이 방법의 예입니다.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{mystyle/.style={xshift=3cm,draw}}
\begin{tikzpicture}
\coordinate (myright) at (1cm,2cm);
\begingroup
\catcode`\,=11
\node (A,B) {Comma};
\node[mystyle] (x) {normal};
\draw (A,B) -- (x) -- (myright);
\endgroup
\end{tikzpicture}
\end{document}

객체 이름을 바꾸는 것이 좋습니다. 데이터베이스 수준일 필요는 없으며 생성된 TeX 코드 자체를 이 목적으로 사용할 수 있습니다.

A,B최소한의 작업 예제에서는 to AB또는 to 등 으로 변경해야 할 것입니다 A-B. 다음과 같이 말하면 최종적이고 적절한 예제에 도달하고 있습니다.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A-B) {Comma};
\node[xshift=3cm] (x) {normal};
\draw (A-B) -- (x);
\end{tikzpicture}
\end{document}

관련 정보