[Tex/LaTex] Specifying the point via “intersection of” in TikZ – a problem

tikz-pgf

I aimed at drawing a square (using TikZ) with a red dot inside it, placed on the intersection of its diagonals:

enter image description here

And while the following method worked fine:

\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0,0); 
\coordinate (b) at (1,1);
\coordinate (c) at (1,0); 
\coordinate (d) at (0,1);
\coordinate (i) at (intersection of a--b and c--d);
\fill[red] (i) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}

when I tried this solution which does not involve specification of the coordinates:

\begin{tikzpicture}
\coordinate (i) at (intersection of {(0,0)--(1,1)} and {(1,0)--(0,1)});
\fill[red] (i) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}

the result was:

enter image description here

So I tried modifying the code to this:

\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\coordinate (i) at (intersection of {(0,0)--(1,1)} and {(1,0)--(0,1)});
\fill[red] (i) circle (2pt);
\end{tikzpicture}

which resulted in the following error message:

! Package PGF Math Error: You asked me to calculate `1/0.0', but I cannot divide any number by zero.

And here's the question – I do not understand why the codes above behave like that. What is the difference between computing the intersection point via defined coordinates and via points on the plane directly. Could you please explain this to me?

Best Answer

Although syntax used by Mad Hatter is still valid, it's and old syntax which is not anymore documented in TikZ 3.0. So, for completion, the a la TikZ 3.0 way to obtain similar results could be:

  1. load intersections library
  2. Declare two named paths: \path[name path=ac] (0,0)--(1,1); ...
  3. Act on intersections of named paths: name intersections={of=ac and bd}

More information about intersections library in 13.3.2 Intersections of arbitrary paths.

Complete code:

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}
\path[name path=ac] (0,0)--(1,1); 
\path[name path=bd] (1,0)--(0,1); 
\fill [red, name intersections={of=ac and bd}] (intersection-1) circle (2pt);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}

enter image description here