I want to convert a TikZ graph from TikZiT into a graph in Mathematica. I want to retain the vertices, edges, and the positions of the vertices. As for the color of the vertices or the style of the edges, I don't need to worry about that for now. Then I used the code written by GPT (with some minor adjustments on my part). When the edge style is not set, everything works fine.
The information of a graph in TikZIt is explained as follows.
\node [style=square] (1) at (10, -10) {};
The node, named 1, is located at (10, -10).
\draw [style=blackedge] (5) to (11);
or
\draw (5) to (11);
This means an egde (5,11) (edge style is like to style=..).
A graph code is stored in test.tikz:
\begin{tikzpicture}[scale=1.0] \begin{pgfonlayer}{nodelayer} \node [style=square] (1) at (10, -10) {}; \node [style=whitenode] (2) at (5.29412, -3.33333) {}; \node [style=square] (3) at (10, 10) {}; \node [style=square] (4) at (-10, -10) {}; \node [style=whitenode] (5) at (3.33333, -5.29412) {}; \node [style=whitenode] (6) at (2.54902, -1.37255) {}; \node [style=whitenode] (7) at (5.29412, 3.33333) {}; \node [style=whitenode] (8) at (3.33333, 5.29412) {}; \node [style=square] (9) at (-10, 10) {}; \node [style=whitenode] (10) at (-5.29412, -3.33333) {}; \node [style=whitenode] (11) at (-3.33333, -5.29412) {}; \node [style=whitenode] (12) at (1.37255, -2.54902) {}; \node [style=square] (13) at (0.980392, -0.980392) {}; \node [style=whitenode] (14) at (2.54902, 1.37255) {}; \node [style=whitenode] (15) at (1.37255, 2.54902) {}; \node [style=whitenode] (16) at (-3.33333, 5.29412) {}; \node [style=whitenode] (17) at (-5.29412, 3.33333) {}; \node [style=whitenode] (18) at (-2.54902, -1.37255) {}; \node [style=whitenode] (19) at (-1.37255, -2.54902) {}; \node [style=square] (20) at (-0.980392, -0.980392) {}; \node [style=square] (21) at (0.980392, 0.980392) {}; \node [style=whitenode] (22) at (-1.37255, 2.54902) {}; \node [style=whitenode] (23) at (-2.54902, 1.37255) {}; \node [style=square] (24) at (-0.980392, 0.980392) {}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw (1) to (2); \draw (1) to (3); \draw (1) to (4); \draw (1) to (5); \draw (2) to (5); \draw (2) to (6); \draw (2) to (7); \draw (3) to (7); \draw (3) to (8); \draw (3) to (9); \draw (4) to (9); \draw (4) to (10); \draw (4) to (11); \draw (5) to (11); \draw (5) to (12); \draw (6) to (12); \draw (6) to (13); \draw (6) to (14); \draw (7) to (8); \draw (7) to (14); \draw (8) to (15); \draw (8) to (16); \draw (9) to (16); \draw (9) to (17); \draw (10) to (11); \draw (10) to (17); \draw (10) to (18); \draw (11) to (19); \draw (12) to (13); \draw (12) to (19); \draw (13) to (20); \draw (13) to (21); \draw (14) to (15); \draw (14) to (21); \draw (15) to (21); \draw (15) to (22); \draw (16) to (17); \draw (16) to (22); \draw (17) to (23); \draw (18) to (19); \draw (18) to (20); \draw (18) to (23); \draw (19) to (20); \draw (20) to (24); \draw (21) to (24); \draw (22) to (23); \draw (22) to (24); \draw (23) to (24); \draw (16) to (15); \draw (8) to (22); \draw (17) to (22); \draw (16) to (23); \draw (23) to (10); \draw (17) to (18); \draw (18) to (11); \draw (10) to (19); \draw (19) to (5); \draw (12) to (11); \draw (6) to (5); \draw (12) to (2); \draw (2) to (14); \draw (7) to (6); \draw (15) to (7); \draw (8) to (14); \draw (22) to (21); \draw (15) to (24); \draw (24) to (13); \draw (21) to (20); \draw (20) to (12); \draw (13) to (19); \draw (23) to (20); \draw (24) to (18); \draw (13) to (14); \draw (6) to (21); \draw (9) to (10); \draw (17) to (4); \draw (4) to (5); \draw (11) to (1); \draw (1) to (7); \draw (3) to (2); \draw (9) to (8); \draw (16) to (3); \draw (4) to (3); \draw (9) to (1); \end{pgfonlayer}\end{tikzpicture}
ImportTikZGraph[file_String] := Module[{tikzCode, lines, nodes, edges, line, parts, nodeID, xCoord, yCoord, startNode, endNode, g},(*Import the TikZ code from the file*) tikzCode = Import[file, "Text"]; (*Initialize lists for nodes and edges*)nodes = {}; edges = {}; (*Split the TikZ code into lines*) lines = StringSplit[tikzCode, "\n"]; (*Extract node information*) For[i = 1, i <= Length[lines], i++, line = StringTrim[lines[[i]]]; If[StringStartsQ[line, "\\node"],(*Extract node ID and coordinates*) parts = StringCases[line, "\\node [" ~~ ___ ~~ "] (" ~~ nodeID : DigitCharacter .. ~~ ") at (" ~~ x : (DigitCharacter | "." | "-" | "E") .. ~~ ", " ~~ y : (DigitCharacter | "." | "-" | "E") .. ~~ ") {};" :> {nodeID, x, y}]; If[Length[parts] > 0, nodeID = ToExpression[parts[[1, 1]]]; xCoord = ToExpression[parts[[1, 2]]]; yCoord = ToExpression[parts[[1, 3]]]; AppendTo[nodes, nodeID -> {xCoord, yCoord}];];];]; (*Extract edge information*) For[i = 1, i <= Length[lines], i++, line = StringTrim[lines[[i]]]; If[StringStartsQ[line, "\\draw"],(*Extract the start and end nodes of edges*) parts = StringCases[line, "\\draw (" ~~ startNode : DigitCharacter .. ~~ ") to (" ~~ endNode : DigitCharacter .. ~~ ");" :> {startNode, endNode}]; If[Length[parts] > 0, startNode = ToExpression[parts[[1, 1]]]; endNode = ToExpression[parts[[1, 2]]]; AppendTo[edges, UndirectedEdge[startNode, endNode]];];];]; (*Create the graph from extracted edges and node positions*) g = Graph[edges, VertexCoordinates -> nodes, VertexStyle -> GrayLevel[1], VertexSize -> Medium]; (*Return the graph*)g]graph = ImportTikZGraph["test.tikz"]
However, when I set the edge styles, it seems to fail. I've tried a few times.
\begin{tikzpicture}[scale=1.0] \begin{pgfonlayer}{nodelayer} \node [style=square] (1) at (10, -10) {}; \node [style=whitenode] (2) at (5.29412, -3.33333) {}; \node [style=square] (3) at (10, 10) {}; \node [style=square] (4) at (-10, -10) {}; \node [style=whitenode] (5) at (3.33333, -5.29412) {}; \node [style=whitenode] (6) at (2.54902, -1.37255) {}; \node [style=whitenode] (7) at (5.29412, 3.33333) {}; \node [style=whitenode] (8) at (3.33333, 5.29412) {}; \node [style=square] (9) at (-10, 10) {}; \node [style=whitenode] (10) at (-5.29412, -3.33333) {}; \node [style=whitenode] (11) at (-3.33333, -5.29412) {}; \node [style=whitenode] (12) at (1.37255, -2.54902) {}; \node [style=square] (13) at (0.980392, -0.980392) {}; \node [style=whitenode] (14) at (2.54902, 1.37255) {}; \node [style=whitenode] (15) at (1.37255, 2.54902) {}; \node [style=whitenode] (16) at (-3.33333, 5.29412) {}; \node [style=whitenode] (17) at (-5.29412, 3.33333) {}; \node [style=whitenode] (18) at (-2.54902, -1.37255) {}; \node [style=whitenode] (19) at (-1.37255, -2.54902) {}; \node [style=square] (20) at (-0.980392, -0.980392) {}; \node [style=square] (21) at (0.980392, 0.980392) {}; \node [style=whitenode] (22) at (-1.37255, 2.54902) {}; \node [style=whitenode] (23) at (-2.54902, 1.37255) {}; \node [style=square] (24) at (-0.980392, 0.980392) {}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw [style=blackedge] (1) to (2); \draw [style=blackedge] (1) to (3); \draw [style=blackedge] (1) to (4); \draw [style=blackedge] (1) to (5); \draw [style=blackedge] (2) to (5); \draw [style=blackedge] (2) to (6); \draw [style=blackedge] (2) to (7); \draw [style=blackedge] (3) to (7); \draw [style=blackedge] (3) to (8); \draw [style=blackedge] (3) to (9); \draw [style=blackedge] (4) to (9); \draw [style=blackedge] (4) to (10); \draw [style=blackedge] (4) to (11); \draw [style=blackedge] (5) to (11); \draw [style=blackedge] (5) to (12); \draw [style=blackedge] (6) to (12); \draw [style=blackedge] (6) to (13); \draw [style=blackedge] (6) to (14); \draw [style=blackedge] (7) to (8); \draw [style=blackedge] (7) to (14); \draw [style=blackedge] (8) to (15); \draw [style=blackedge] (8) to (16); \draw [style=blackedge] (9) to (16); \draw [style=blackedge] (9) to (17); \draw [style=blackedge] (10) to (11); \draw [style=blackedge] (10) to (17); \draw [style=blackedge] (10) to (18); \draw [style=blackedge] (11) to (19); \draw [style=blackedge] (12) to (13); \draw [style=blackedge] (12) to (19); \draw [style=blackedge] (13) to (20); \draw [style=blackedge] (13) to (21); \draw [style=blackedge] (14) to (15); \draw [style=blackedge] (14) to (21); \draw [style=blackedge] (15) to (21); \draw [style=blackedge] (15) to (22); \draw [style=blackedge] (16) to (17); \draw [style=blackedge] (16) to (22); \draw [style=blackedge] (17) to (23); \draw [style=blackedge] (18) to (19); \draw [style=blackedge] (18) to (20); \draw [style=blackedge] (18) to (23); \draw [style=blackedge] (19) to (20); \draw [style=blackedge] (20) to (24); \draw [style=blackedge] (21) to (24); \draw [style=blackedge] (22) to (23); \draw [style=blackedge] (22) to (24); \draw [style=blackedge] (23) to (24); \draw [style=blueedge] (16) to (15); \draw [style=blueedge] (8) to (22); \draw [style=blueedge] (17) to (22); \draw [style=blueedge] (16) to (23); \draw [style=blueedge] (23) to (10); \draw [style=blueedge] (17) to (18); \draw [style=blueedge] (18) to (11); \draw [style=blueedge] (10) to (19); \draw [style=blueedge] (19) to (5); \draw [style=blueedge] (12) to (11); \draw [style=blueedge] (6) to (5); \draw [style=blueedge] (12) to (2); \draw [style=blueedge] (2) to (14); \draw [style=blueedge] (7) to (6); \draw [style=blueedge] (15) to (7); \draw [style=blueedge] (8) to (14); \draw [style=blueedge] (22) to (21); \draw [style=blueedge] (15) to (24); \draw [style=blueedge] (24) to (13); \draw [style=blueedge] (21) to (20); \draw [style=blueedge] (20) to (12); \draw [style=blueedge] (13) to (19); \draw [style=blueedge] (23) to (20); \draw [style=blueedge] (24) to (18); \draw [style=blueedge] (13) to (14); \draw [style=blueedge] (6) to (21); \draw [style=blueedge] (9) to (10); \draw [style=blueedge] (17) to (4); \draw [style=blueedge] (4) to (5); \draw [style=blueedge] (11) to (1); \draw [style=blueedge] (1) to (7); \draw [style=blueedge] (3) to (2); \draw [style=blueedge] (9) to (8); \draw [style=blueedge] (16) to (3); \draw [style=blueedge, bend left=60, looseness=2.25] (4) to (3); \draw [style=blueedge, bend left=60, looseness=2.25] (9) to (1); \end{pgfonlayer}\end{tikzpicture}