ノード名内のカンマ

ノード名内のカンマ

私のデータベースでは、いくつかのオブジェクトの名前がA,B形式になっています。つまり、間にカンマがあります。私は次のようにしたいのです。

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

ただし、これは許可されていません。ノード名にコンマを使用したり、ノード名に一般的な他の特殊文字を使用するにはどうすればよいですか?

答え1

TikZは次のようなテストを実行するため、座標式にコロンが含まれていますか? その場合は、angle:radius polar 構文に切り替えます。ドットが含まれていますか? その場合は、(ノード名.angle) 構文などに切り替えます。

このような解析からのコード スニペットを以下に示します。

\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

しかし、一連の問題に直面しており、それでも、特別な注意が必要となるコンマ関連の状況が見つかります。その理由は、コンマがパラメータのリストとポイント座標の区切り文字として使用されているためです。したがって、グループを使用して、可能な限りその使用を制限します。

次の例のように、また{ }はとを使用して 1 つまたは複数のコマンドを制限できます。\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}}

これは、1 つの 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}

[xshift=3cm,draw]TikZ ツールを使用すると、パラメータのリスト (例: )とポイント座標のペア (例: )を固定するため、特定の領域を制限し、その中で直接コンマを使用することを避けることもできます(1cm,2cm)

最初のケースでは、制限グループの外側のスタイルを定義できます。たとえば、次のようになります。

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

2 番目のケースでは、\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最小限の動作例では、をABに、または などに変更する必要があります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}

関連情報