내 데이터베이스에는 일부 개체의 이름 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}