
Estoy tratando de mejorar la legibilidad de mi \drawHoshis
macro creando variables para las coordenadas xey, además de ejecutar un cálculo con un signo menos entre paréntesis (por ejemplo x * (y - 1)
, ). No sé por qué, pero parece que no puedo hacer que TeX funcione con él. Creo que es algo relacionado con la matriz de TikZ/PGF \foreach
:
\foreach \sloc in {{3, 3}, {3, 7}, {7, 3}, {7, 7}, {5, 5}}{
% This is what I'm tryig to improve:
\filldraw (#3 * {\sloc}[0] - #3, #3 * {\sloc}[1] - #3)
circle [radius=#3 / 10];
}
Estoy intentando que se parezca más a esto:
\newlength{\hoshiCoordX}
\newlength{\hoshiCoordY}
% 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]{
\ifthenelse{#2 = 9} {
\foreach \sloc in {{3, 3}, {3, 7}, {7, 3}, {7, 7}, {5, 5}}{
\setlength{\hoshiCoordX}{\dimexpr #3 * ({\sloc}[0] - 1) \relax}
\setlength{\hoshiCoordY}{\dimexpr #3 * ({\sloc}[1] - 1) \relax}
\filldraw (\hoshiCoordX, \hoshiCoordY)
circle [radius=#3 / 10];
}
}{}
}
Aqui esta el completolaboralejemplo:
\documentclass{article}
\newlength{\step}
% Parameters
%
% 1: dimension (in cm)
% 2: board size (square)
%
% Example: A 19x19 board with size 10cm x 10cm: `\gogrid{10}{19}'
\newcommand{\goGrid}[2]{
\setlength{\step}{\dimexpr #1cm / (#2 - 1) \relax} % chktex 1
\draw[step=\step] (0, 0) grid (#1, #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]{
\ifthenelse{#2 = 9} {
\foreach \sloc in {{3, 3}, {3, 7}, {7, 3}, {7, 7}, {5, 5}}{
% This is what I'm tryig to improve:
\filldraw (#3 * {\sloc}[0] - #3, #3 * {\sloc}[1] - #3)
circle [radius=#3 / 10];
}
}{}
}
\usepackage{tikz}
\begin{document}
\begin{figure}[ht]
\begin{center}
\begin{tikzpicture}
\goGrid{10}{9}
\end{tikzpicture}
\caption{Goban 1}\label{my_goban_1}
\end{center}
\end{figure}
\end{document}
Probé muchas variaciones de esto, pero ninguna funcionó hasta ahora ( \dimexpr
también lo intenté sin ella). ¿Alguien puede detectar lo que me falta?
Respuesta1
No estoy seguro de lo que desea que produzca el código, pero las cosas serán mucho más fáciles si usa \pgfmathsetmacro
en lugar de, \setlength
ya que esto hará los cálculos automáticamente por usted. No es necesario agregar una unidad de longitud, porque la unidad base en TikZ es de 1 cm de todos modos. También reemplazaría el \ifthenelse
comando que requiere algún paquete por \ifnum
.
Si desea hacer cálculos dentro de una coordenada que requiera el uso de paréntesis, debe envolver las cosas entre llaves. Las dos líneas siguientes representan la misma coordenada:
(#3 * {\sloc}[0] - #3, #3 * {\sloc}[1] - #3)
({#3 * ({\sloc}[0] - 1}, {#3 * ({\sloc}[1] - 1)})
En cualquier caso, parece que en tu código los índices para seleccionar los elementos de los arrays están mal, al menos en uno de los fragmentos de código que muestras. Asegúrese de que sean correctos.
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
% 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);
\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}}{
% This is what I'm trying to improve:
%\filldraw (#3 * {\sloc}[0] - #3, #3 * {\sloc}[1] - #3)
\filldraw ({#3 * ({\sloc}[0] - 1}, {#3 * ({\sloc}[1] - 1)})
circle[radius={#3 / 10}];
}
\fi
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{9}
\end{tikzpicture}
\end{document}
Alternativamente:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
% 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);
\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
}
\begin{document}
\begin{tikzpicture}
\goGrid{10}{9}
\end{tikzpicture}
\end{document}
Salida de ambos fragmentos de código: