„Unzulässige Maßeinheit (pt eingefügt)“ trotz Maßberechnungen?

„Unzulässige Maßeinheit (pt eingefügt)“ trotz Maßberechnungen?

Nachdem Sie die Tipps indiese Antwortvon @JasperHabricht, ich versuche, das folgende Makro zu verbessern, aber ich bekomme nur Illegal unit of measure (pt inserted), obwohl die Messberechnungen durchgeführt wurden und obwohl vor der Verwendung \pgfmathsetmacroin den anderen Makros alles einwandfrei funktionierte. Und ja, ich habe versucht, das \newlengths und \setlengths durch \pgfmathsetmacros zu ersetzen.

\newcounter{coordinateCounter}
\setcounter{coordinateCounter}{1}
\newlength{\coordinateShift}
\newlength{\leftRightShift}
\newlength{\topBottomShift}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
% 3: step
% 
% Example: A 19x19 board with size 10cm x 10cm: `\coordinates{10}{19}{\step}'
\newcommand{\coordinates}[3]{
  % For some reason, TeX doesn't like dividin by non-integers?
  \setlength{\leftRightShift}{\dimexpr #3 * 10 / 14 \relax}
  \setlength{\topBottomShift}{\dimexpr #3 * 10 / 15 \relax}

  \foreach [count=\i] \l in {A, B, ..., Z} {
    \ifthenelse{\equal{\l}{I} \OR \i > \numexpr #2 + 1 \relax}{}{
      \setlength{\coordinateShift}{\dimexpr #3 * (\thecoordinateCounter - 1) \relax}

      % Top
      \draw[
        xshift = \coordinateShift,
        yshift = #1cm + \topBottomShift,
      ] node {\l};
      % Right
      \draw[
        xshift = #1cm + \leftRightShift,
        yshift = \coordinateShift,
      ] node {\thecoordinateCounter};
      % Bottom
      \draw[
        xshift = \coordinateShift,
        yshift = -(\leftRightShift),
      ] node {\l};
      % Left
      \draw[
        xshift = -(\leftRightShift),
        yshift = \coordinateShift,
      ] node {\thecoordinateCounter};

      \stepcounter{coordinateCounter}
    }
  }
  \setcounter{coordinateCounter}{1}
}

Das vollständige Minimalbeispiel:

\documentclass{article}

\usepackage{tikz}
\usepackage{ifthen}

% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
% 
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{
  \pgfmathsetmacro{\step}{#1 / (#2 - 1)} % chktex 1

  \draw[step=\step] (0, 0) grid (#1, #1);
  
  \boardOutline{#1}
  
  \coordinates{#1}{#2}{\step} % chktex 1
  
  \drawHoshis{#1}{#2}{\step}
}

% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
% 3: step
% 
% Example: A 19x19 board with size 10cm x 10cm: `\drawHoshis{10}{19}{\step}'
\newcommand{\drawHoshis}[3]{
  \ifnum#2=9\relax
    \foreach \sloc in {{3, 3}, {3, 7}, {7, 3}, {7, 7}, {5, 5}}{
      \pgfmathsetmacro{\hoshiCoordX}{#3 * ({\sloc}[0] - 1)}
      \pgfmathsetmacro{\hoshiCoordY}{#3 * ({\sloc}[1] - 1)}

      \filldraw (\hoshiCoordX, \hoshiCoordY)
        circle [radius=#3 / 10];
    }
  \fi
}

% Parameters
%
% 1: dimension (in cm)
% 
% Example: \boardOutline{10}
\newcommand{\boardOutline}[1]{
  \pgfmathsetmacro{\boardOutlineLineWidth}{#1 * 5 / 1000}
  % Just so the board outline isn't jagged
  \pgfmathsetmacro{\boardOutlinePadding}{\boardOutlineLineWidth / 2}

  % Top
  \draw[black, line width = \boardOutlineLineWidth]
    (-\boardOutlinePadding, #1) -- (#1 + \boardOutlinePadding, #1); % chktex 1 chktex 8
  % Right
  \draw[black, line width = \boardOutlineLineWidth] 
    (#1, 0) -- (#1, #1); % chktex 8
  % Bottom
  \draw[black, line width = \boardOutlineLineWidth]
    (-\boardOutlinePadding, 0) -- (#1 + \boardOutlinePadding, 0); % chktex 1 chktex 8
  % Left
  \draw[black, line width = \boardOutlineLineWidth]
    (0, 0) -- (0, #1); % chktex 8
}

\newcounter{coordinateCounter}
\setcounter{coordinateCounter}{1}
\newlength{\coordinateShift}
\newlength{\leftRightShift}
\newlength{\topBottomShift}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
% 3: step
% 
% Example: A 19x19 board with size 10cm x 10cm: `\coordinates{10}{19}{\step}'
\newcommand{\coordinates}[3]{
  % For some reason, TeX doesn't like dividin by non-integers?
  \setlength{\leftRightShift}{\dimexpr #3 * 10 / 14 \relax}
  \setlength{\topBottomShift}{\dimexpr #3 * 10 / 15 \relax}

  \foreach [count=\i] \l in {A, B, ..., Z} {
    \ifthenelse{\equal{\l}{I} \OR \i > \numexpr #2 + 1 \relax}{}{
      \setlength{\coordinateShift}{\dimexpr #3 * (\thecoordinateCounter - 1) \relax}

      % Top
      \draw[
        xshift = \coordinateShift,
        yshift = #1cm + \topBottomShift,
      ] node {\l};
      % Right
      \draw[
        xshift = #1cm + \leftRightShift,
        yshift = \coordinateShift,
      ] node {\thecoordinateCounter};
      % Bottom
      \draw[
        xshift = \coordinateShift,
        yshift = -(\leftRightShift),
      ] node {\l};
      % Left
      \draw[
        xshift = -(\leftRightShift),
        yshift = \coordinateShift,
      ] node {\thecoordinateCounter};

      \stepcounter{coordinateCounter}
    }
  }
  \setcounter{coordinateCounter}{1}
}

\begin{document}
  \begin{figure}[ht]
    \begin{center}
      \begin{tikzpicture}
        \goGrid{5}{9}
      \end{tikzpicture}
      \caption{Goban 1}\label{my_goban_1}
    \end{center}
  \end{figure}
\end{document}

Antwort1

Sie hätten etwa 100 Zeilen aus Ihrem Beispiel streichen können. Die Fehlermeldung hebt die Position des Fehlers hervor.

! Illegal unit of measure (pt inserted).
<to be read again> 
                   *

Du hast

\setlength{\leftRightShift}{\dimexpr #3 * 10 / 14 \relax}

an dieser Stelle #3ist , \stepwas im Wesentlichen definiert ist als

\def\step{0.625}

Wie die Fehlermeldung besagt, sind in diesem Ausdruck keine Einheiten enthalten.

Sie können beispielsweise Folgendes verwenden:

\pgfmathsetmacro{\leftRightShift}{#3 * 10 / 14}

Oder dieses:

\setlength{\leftRightShift}{\dimexpr #3cm * 10 / 15 \relax}

verwandte Informationen