
Ich versuche, die Lesbarkeit meines \drawHoshis
Makros zu verbessern, indem ich Variablen für die x- und y-Koordinaten erstelle und außerdem eine Berechnung mit einem Minus in Klammern ausführe (z. B. x * (y - 1)
). Ich weiß nicht, warum, aber ich kriege es einfach nicht hin, damit in TeX zu funktionieren. Ich glaube, es hat etwas mit dem Array aus TikZ/PGF zu tun \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];
}
Ich versuche, es eher so aussehen zu lassen:
\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];
}
}{}
}
Hier ist die kompletteArbeitenBeispiel:
\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}
Ich habe viele Varianten davon ausprobiert, aber keine hat bisher funktioniert (ich habe es \dimexpr
auch ohne probiert). Kann irgendjemand erkennen, was ich übersehe?
Antwort1
Ich bin mir nicht sicher, was der Code erzeugen soll, aber es wird viel einfacher sein, wenn Sie \pgfmathsetmacro
anstelle von verwenden \setlength
, da dies die Berechnungen automatisch für Sie durchführt. Es ist nicht nötig, eine Längeneinheit hinzuzufügen, da die Basiseinheit in TikZ beträgt sowieso 1 cm. Ich würde auch den \ifthenelse
Befehl, der ein Paket erfordert, durch ersetzen \ifnum
.
Wenn Sie Berechnungen innerhalb einer Koordinate durchführen möchten, die die Verwendung von Klammern erfordern, müssen Sie diese in geschweifte Klammern setzen. Die folgenden beiden Zeilen stellen beide dieselbe Koordinate dar:
(#3 * {\sloc}[0] - #3, #3 * {\sloc}[1] - #3)
({#3 * ({\sloc}[0] - 1}, {#3 * ({\sloc}[1] - 1)})
Auf jeden Fall scheinen in Ihrem Code die Indizes zum Auswählen der Elemente aus den Arrays falsch zu sein, zumindest in einem der von Ihnen angezeigten Codeausschnitte. Stellen Sie sicher, dass diese korrekt sind.
\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}
Alternative:
\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}
Ausgabe beider Code-Schnipsel: