%60%20a%20pesar%20de%20los%20c%C3%A1lculos%20de%20medici%C3%B3n%3F.png)
Después de seguir los consejos deesta respuestapor @JasperHabricht, estoy tratando de mejorar la siguiente macro, pero lo único que obtengo es Illegal unit of measure (pt inserted)
, a pesar de que se realizaron los cálculos de medición y el hecho de que, antes de usarla \pgfmathsetmacro
en las otras macros, todo funcionaba bien. Y sí, intenté reemplazar la \newlength
s y \setlength
la s por \pgfmathsetmacro
s.
\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}
}
El ejemplo mínimo completo:
\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}
Respuesta1
podría haber cortado unas 100 líneas de su ejemplo. El mensaje de error resalta la ubicación del error.
! Illegal unit of measure (pt inserted).
<to be read again>
*
Tienes
\setlength{\leftRightShift}{\dimexpr #3 * 10 / 14 \relax}
en este punto, #3
es \step
lo que se define esencialmente como
\def\step{0.625}
Entonces, como dice el mensaje de error, no tienes unidades en esta expresión.
Podrías, por ejemplo, usar esto:
\pgfmathsetmacro{\leftRightShift}{#3 * 10 / 14}
O esto:
\setlength{\leftRightShift}{\dimexpr #3cm * 10 / 15 \relax}