節點名稱中的逗號

節點名稱中的逗號

在我的資料庫中,有些物件具有A,B格式名稱,即中間有逗號。我想做這樣的事情

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

然而,這是不被允許的。如何在節點名稱中使用逗號,或在節點名稱中使用其他特殊字元?

答案1

你不能,因為 TikZ 執行諸如座標表達式是否包含冒號?然後轉到角度:半徑極座標語法。它涉及一個點嗎?然後切換到 (節點名稱.角度) 語法等。

下面是此類解析的程式碼片段;

\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`\,=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,BAB或 到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}

相關內容