\section{Sintaxis de coordenadas}
\label{subsec:sintaxis-de-coordenadas}

Algo que distingue a \pgfgoname\ de otros paquetes es la posibilidad de introducir coordenadas con diversas sintaxis:
\begin{itemize}
	\item Posibilidad de tener múltiples entradas separando con comas.
	\item Posibilidad de eliminar piedras agregando el grupo sustractivo despu\'es de un <<;>>.
\end{itemize}

Estas formas solo funcionan en los comandos plurales (|\stones|, |\marks|, |\prisoners|); |\stone|, |\mark| y |\prisoner| reciben una sola intersección. |\moves| las acepta todas salvo los grupos sustractivos, y avisa si no tienen un orden fijo (pág.~\pageref{subsec:orden-coordenadas}). La escritura tiene algunas restricciones. Por ejemplo, para referirse a una intersección, la coordenada alfabética debe escribirse en mayúsculas y sin espacios. Así, la intersección B5 debe ingresarse como |B5|, y no como |B 5|, |B  5| o |b5|, ya que los espacios entre letra y número no son válidos en este contexto. Las restricciones se explicarán en cada caso.


Cuando \pgfgoname\ tiene que leer el argumento de las coordenadas se puede encontrar con algo como esto
\begin{center}
	|\stones{|{\color{red}|<item>, <item>, |\dots;} {\color{blue} |<item>, <item>, |\dots; }{\color{red} \dots}|}|
\end{center}

Lo primero que intentar\'a hacer es dividir el argumento entre los |;| y construir dos grupos: el grupo aditivo y el grupo sustractivo. El grupo aditivo es el encargado de a\~nadir piedras mediante nuestra sintaxis. El grupo sustractivo es el encargado de eliminarlas. Estos grupos alternan automáticamente al colocar un |;|. Esto se ve con m\'as detalle en la subsecci\'on correspondiente. Si no se coloca un |;|, \pgfgoname\ a\~nadir\'a todas las piedras al grupo aditivo. Se pueden a\~nadir varias piedras o varios grupos separados por |,|. En conjunto, todo esto provee una interfaz para crear grupos complejos con pocos \emph{tokens};

\begin{codeexample}[width=0pt]
	\pgfgoset{profile = pgfgosmooth}
	
	\begin{goban}[17, partial = A1:R5, label = {at = {north, west}}]
		\stones[b]{*;B,D,H,M,R2,Q,F2:4,K2rL5,O[1:2,4];B3}
	\end{goban}
\end{codeexample}


\subsection{Grupos de piedras}

\def\sssseccion#1{\vskip0.5em\noindent\textbf{#1}\par}

\sssseccion{Todas las piedras del tablero (\emph{?`Por qu\'e no?})}

A\~nade al correspondiente grupo todas las intersecciones \textbf{visibles} del tablero. Es decir, si  es un tablero parcial, solo se a\~nadir\'an las correspondientes a la regi\'on visible. Es importante aclarar esto por si se usa en combinaci\'on con |resume|. Su sintaxis es |*|.

\begin{codeexample}[]
	\pgfgoset{goban = {5, partial = B2:D4}}
	
	\begin{goban}[label = {at = {south, west}}]
		\stones[b]{*}
	\end{goban}
\end{codeexample}


\sssseccion{Intersección}

Las intersecciones se especifican indicando la letra seguida del número, sin espacios entre el componente alfabético y el numérico: |AN|

\begin{codeexample}[]
	\pgfgoset{goban = {5, partial = B2:D4}}
	
	\begin{goban}[label = {at = {south, west}}]
		\stones[b]{C2, D3}
		\stone[w]{B4}
		\stone[w]{B 3} % No se reconoce porque tiene un espacio.
	\end{goban}
\end{codeexample}

En el ejemplo, |B 3| no se reconoce debido al espacio, mientras que |B4| se dibuja correctamente como una piedra blanca.

\sssseccion{Rectas verticales u horizontales}
Las líneas son grupos de piedras verticales u horizontales delimitadas impl\'icitamente por el tama\~no del tablero: una columna o una fila entera.

\begin{itemize}
	\item Para una columna (una línea vertical), la sintaxis es |L|: |D| es la columna D.
	\item Para una fila (una línea horizontal), la sintaxis es |N|: |4| es la fila 4.
\end{itemize}

\begin{codeexample}[width=6cm]
	\pgfgoset{goban = {5, partial = B2:D4}}
	
	\begin{goban}
		\stones[b]{B2,B3,B4}
		\stones[fill = {color = red}]{D}
	\end{goban}
	
	\begin{goban}
		\stones[b]{B2,C2,D2}
		\stones[fill = {color = blue}]{4}
	\end{goban}
	
	\begin{goban}
		%Agrego las líneas C y 3. Luego elimino C3.
		\stones[fill = {color = orange}]{C, 3; C3} %OJO C,3 != C3.
	\end{goban}
\end{codeexample}

\sssseccion{Segmentos}

Los segmentos son grupos de piedras verticales u horizontales explícitamente delimitados. Como son unidireccionales (solo verticales o solo horizontales), una de sus coordenadas permanece constante y no necesita repetirse; solo se especifica el rango de la otra variable.

\begin{itemize}
	\item Para segmentos horizontales, la sintaxis es |L:LN| o |L:L N|.
	\item Para segmentos verticales, la sintaxis es |LN:N| o |L N:N|.
\end{itemize}

\begin{codeexample}[width=6cm]
	\pgfgoset{goban = {5, partial = B2:D4}}
	
	\begin{goban}
		\stones[b]{B2,B3,B4}
		\stones[w]{C2,D2}
	\end{goban}
	
	\begin{goban}
		\stones[b]{B2:4}
		\stones[w]{C:D2}
	\end{goban}
	
	\begin{goban}
		% Los espacios funcionan entre elementos distintos.
		\stones[b]{B 2:4}
		\stones[w]{C:D 2}
	\end{goban}
\end{codeexample}

Aquí, |B2:4| representa un segmento vertical de B2 a B4, mientras que |C:D2| indica un segmento horizontal de C2 a D2. Los segmentos van del primer extremo al segundo: |H9:2| baja de H9 a H2 y |E:A2| va de E2 a A2. Además, se encadenan con los operadores que veremos más adelante.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A:E5}
		\stones[fill = {color = blue}]{H9:2}
		\stones[fill = {color = orange}]{E:A2}
		\stones[fill = {color = magenta}]{A:D7, A:C9} % Pueden combinarse.
	\end{goban}
\end{codeexample}

\sssseccion{Rectángulo: una consecuencia artificial}

La sintaxis de segmentos permite crear rangos entre coordenadas para insertar piedras. Me pareció útil extenderla para incluir dos rangos y así ofrecer una primera aproximación a los rectángulos (aunque no es mi método favorito, aquí está). En este caso, la sintaxis es |L:L N:N| o |L:LN:N|. 

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		% El espacio no es obligatorio.
		\stones[fill = {color = red}]{A:E 7:8}
		\stones[fill = {color = blue}]{I:G 9:2}
		\stones[fill = {color = orange}]{A:B 2:4, F:D 1:3}
	\end{goban}
\end{codeexample}

Por ejemplo, |A:E 7:8| crea un rectángulo que abarca las columnas de A a E en las filas 7 y 8, mientras que |I:G 9:2| desciende de I9 a G2. Funciona, pero los operadores que veremos más adelante son más claros.


\sssseccion{Productos Cartesianos}
	En este contexto, el producto cartesiano es una extensi\'on m\'as poderosa de los segmentos, pero a su vez, una generalizaci\'on a todas las notaciones antes presentadas. La idea detr\'as de esto es la siguiente: Supongamos que queremos ingresar un grupo de piedras sobre la columna A: |A1:3, A5, A7:8|. Hasta el momento no hab\'ia forma m\'as sencilla de escribir esto. Pero todas repiten A al comienzo: ?`qu\'e tal si en lugar de escribirla tres veces la escribimos solo una? Algo como
	\begin{center}
		|A[1:3, 5, 7:8]|
	\end{center}
	En este caso, el int\'erprete va a distribuir el A de la izquierda para cada uno de los elementos de la derecha.
	
	Los elementos de la lista de la derecha no necesariamente tienen que estar formados por n\'umeros. Si se tiene algo como esto |A:D 5:7, A1:2, A3, A:G9| tambi\'en se puede reescribir as\'i
	\begin{center}
		|A[:D 5:7, 1:2, 3, :G9]|
	\end{center}
	Claro est\'a que nadie abstrae tanto al momento de poner coordenadas, por lo que esto es solo mero capricho. La \'unica restricci\'on para el contenido entre corchetes es que no pueden anidarse corchetes. 
	
	Del mismo modo que hay una sintaxis para letras a la izquierda, hay una para n\'umeros a la derecha, y funciona igual. La expresi\'on |A12, C12, E:G12| puede escribirse como |[A,C,E:G]12|.
	
	Existe un tercer operador, que s\'i, es m\'as un capricho que otra cosa y es el producto cartesiano sin restricciones. No me detendr\'e mucho en \'el, porque este requiere mayor grado de abstracci\'on y realmente no tiene utilidad humana. Este operador es una conjunci\'on de los dos anteriores: La expresi\'on |[A,D:F][2,5,7:9]| se interpreta como
	\begin{center}
		|A2, A5, A7:9, D:F2, D:F5, D:F 7:9|.
	\end{center}
 
	\begin{codeexample}[width=4cm]
		\begin{goban}
			\stones[b]{[A, D:F][2, 5, 7:9]}
			\marks[b]{A2, A5, A7:9, D:F2, D:F5, D:F 7:9} %<- lo que lee el int\'erprete.
		\end{goban}
	\end{codeexample}

	La sintaxis de producto cartesiano entonces se puede invocar de tres formas distintas:
\begin{itemize}
	\item |L[itm1, itm2,...]|.
	\item |[itm1, itm2,...]N|.
	\item |[itm1,itm2,...][itm3,itm4,...]|.
\end{itemize}
donde los corchetes no pueden anidarse. 

Esto puede combinarse tambi\'en con algunos operadores que veremos a continuaci\'on para crear nodos en los caminos.

Hasta aquí hemos visto formas que no pueden combinarse con otras en un mismo elemento y que, por lo tanto, \textbf{deben} separarse por comas. Ahora veremos operadores que unen dos intersecciones con un camino y que pueden encadenarse entre sí.

\sssseccion{Horizontal--Vertical y Vertical--Horizontal}

Dadas dos intersecciones no alineadas vertical ni horizontalmente, estos comandos generan las intersecciones que conectan la primera con la segunda mediante un recorrido «horizontal--vertical» o «vertical--horizontal». Esto puede recordar al operador \verb+-|+ de TikZ, de donde tomé prestada la idea. La sintaxis es \verb+LN -| LN+ (para el primer caso) o \verb+LN |- LN+ (para el segundo), con o sin espacios. Estos comandos, junto con los siguientes, pueden encadenarse para formar escaleras o recorridos propios de la m\'etrica de Manhattan.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A1 -| D3}
		\stones[fill = {color = blue}]{D4 -| A2}
		\stones[fill = {color = orange}] {A9 -| C7 -| G5} % Encadenados.
		\stones[fill = {color = magenta}] {F1 |- I3 -| E4} % Intente adivinar.
	\end{goban}
\end{codeexample}

En este ejemplo, \verb+A1 -| D3+ va horizontalmente de A1 a D1 y luego verticalmente a D3.

\sssseccion{Líneas en cualquier dirección}

Para dos intersecciones cualesquiera, |LN -- LN| dibuja la línea de piedras más parecida a la recta que las une: una piedra por fila (o por columna, si la línea avanza más de lo que sube o baja), la más cercana a la recta. Si las dos intersecciones están en una misma fila o columna, es la línea recta entre ellas.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A1 -- A5}
		\stones[fill = {color = blue}] {A1 -- D1}
		\stones[fill = {color = magenta}] {B9 -- D3}
		\stones[fill = {color = orange}] {I9 -| F6 -- I6} % Encadenado.
	\end{goban}
\end{codeexample}

Cuando la recta pasa justo entre dos intersecciones, la piedra va del lado del extremo más cercano, y en el medio exacto, a la columna (o la fila) menor. Así, |A1 -- C5| y |C5 -- A1| dan las mismas piedras, y la línea queda simétrica, como la recta.

\sssseccion{Escaleras}

Las piedras de una línea inclinada se tocan solo por las esquinas en cada escalón, como en una diagonal, así que en go no forman un grupo. Para que lo formen, \verb+LN -|- LN+ y \verb+LN |-| LN+ rellenan cada escalón con la esquina de \verb+-|+ (primero horizontal) o de \verb+|-+ (primero vertical): el resultado es una escalera conectada, como sugiere el dibujo del operador. Si las dos intersecciones están en una misma fila o columna, dan la misma línea recta que |--|.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A1 -- C7}
		\stones[fill = {color = blue}]{D1 -|- F7}
		\stones[fill = {color = orange}]{G1 |-| I7}
	\end{goban}
\end{codeexample}

En las escaleras el orden de los extremos sí importa, como en \verb+-|+ y \verb+|-+.

\sssseccion{Rectángulos rellenos y vacíos}

La sintaxis previa para rectángulos |L:L N:N| es poco intuitiva y más bien una herencia de los segmentos acotados. Es más directo dar dos vértices diametralmente opuestos: |LN:LN| rellena el rectángulo (es la misma escritura que la de |partial|) y |LN r LN| dibuja solo su contorno. Aunque los espacios alrededor de |r| no son obligatorios, recomiendo usarlos para mayor legibilidad.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A1:D3}
		\stones[fill = {color = blue}] {A5 r D8}
		\stones[fill = {color = orange}] {I8 r G4, H6} % ¡Está vivo!
	\end{goban}
\end{codeexample}

Por ejemplo, |A1:D3| rellena un rectángulo de A1 a D3, mientras que |A5 r D8| dibuja solo el borde de un rectángulo mayor. Un rectángulo de una sola columna o de una sola fila es un segmento: |A5:A9| es |A5:9|.

\sssseccion{Encadenamiento}

Los operadores (\verb+-|+, \verb+|-+, |--|, \verb+-|-+, \verb+|-|+ y |r|) se encadenan: \verb+A1 -| C3 -- E3+ es \verb+A1 -| C3+ seguido de \verb+C3 -- E3+, y C3 va una sola vez. Entre dos operadores no solo puede ir una intersección: también un segmento (|B5:7|, |A:B3|) o un rectángulo (|A1:C3|). Cada operador va del último punto de lo anterior al primero de lo siguiente. Así, \verb+A2 -| B5:7+ es \verb+A2 -| B5+ seguido de |B5:7|, y \verb+B7 -| A:B3+ es \verb+B7 -| A3 -- B3+.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = red}]{A2 -| B5:7}
		\stones[fill = {color = blue}]{I9 -| D:F6}
		\stones[fill = {color = orange}]{F1:3 |- I5}
	\end{goban}
\end{codeexample}

Los rectángulos también se encadenan, para crear patrones más complejos.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = orange}] {I8 r G6 r I4} % Ud. adivine.
		\marks[sequence]{I8,G6,I4}
		\stones[fill = {color = blue!20}] {A1:E3 r A6 |- E9 -- E8} % ¡Wow!
		\marks[sequence]{A1,E3,A6,E9,E8}
	\end{goban}
\end{codeexample}

En este caso, |I8 r G6 r I4| encadena dos rectángulos de contorno, mientras que \verb+A1:E3 r A6 |- E9 -- E8+ combina un rectángulo relleno, un contorno, un recorrido «vertical--horizontal» y una línea. Las formas que van solas (|*|, |L|, |N|, |L:L|, |N:N| y |L:L N:N|) no se encadenan.

\sssseccion{El orden de las intersecciones}
\label{subsec:orden-coordenadas}

Las intersecciones salen en el orden en que se escriben: los segmentos van del primer extremo al segundo (|N10:7| baja de N10 a N7), los operadores siguen su camino y los corchetes se reparten en su lugar (|D4, B[3:1]| es |D4, B3:1|). Ese es el orden que numeran |\moves| y |sequence|.

\begin{codeexample}[width=6cm]
	\begin{goban}[7, label = {at = {south, west}}]
		\stones[w]{A1 -|- F4}
		\marks[sequence]{A1 -|- F4}
	\end{goban}

	\begin{goban}[7, label = {at = {south, west}}]
		\stones[w]{G7:4 -| D2 -- A2}
		\marks[sequence = {format = Alph}]{G7:4 -| D2 -- A2}
	\end{goban}
\end{codeexample}

Algunas formas no tienen un recorrido fijo: los rectángulos (|LN:LN|, |L:L N:N| y |LN r LN|), las columnas y las filas enteras y |*|. |\stones| y |\marks| las aceptan como a las demás, pero |\marks[sequence]| y |\moves| avisan (|unordered-coordinate|), porque el orden en que las recorren no lo elige quien escribe.

\subsection{Grupos aditivos y sustractivos}

Supongamos que queremos dibujar el siguiente diagrama:

\begin{figure}[H]
	\centering
	\begin{goban}
		\stones[b]{A1:E6; C6 |- E3, A 1:2;}
	\end{goban}
\end{figure}

Esto puede lograrse con los operadores ya vistos, dividiendo el patrón en varias partes:

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[fill = {color = orange}] {A6:B3, B2:E1, D4:E6}
	\end{goban}
\end{codeexample}

Pero también podemos imaginar que partimos de un rectángulo completo al que le hemos quitado las piedras marcadas:

\begin{figure}[H]
	\centering
	\begin{goban}
		\stones[b]{A1:E6}
		\marks[cross, line = {color = white}]{C6 |- E3, A1:2}
	\end{goban}
\end{figure}

De esto tratan los grupos aditivos y sustractivos. Un grupo aditivo añade intersecciones a la lista, mientras que uno sustractivo las elimina. Por defecto, los comandos siempre comienzan procesando grupos aditivos, lo que explica que dibujen piedras directamente. En \pgfgoname, podemos alternar entre ambos tipos usando |;|.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6} % Grupo aditivo.
	\end{goban}
	
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6; A 1:2} % Grupo aditivo; sustractivo.
	\end{goban}
	
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6; A 1:2, C6 |- E3} % Grupo aditivo; sustractivo.
	\end{goban}
\end{codeexample}

En esta secuencia, primero se dibuja un rectángulo completo (|A1:E6|), luego se elimina el segmento vertical |A 1:2|, y finalmente se quita el recorrido \verb+C6 |- E3+. El resultado es el diagrama del principio.

A veces, un patrón es ideal salvo por una o dos piedras: con un grupo sustractivo se quitan sin rehacer todo.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}]
		\stones[b]{A1:E6; B:D 5, C2}
	\end{goban}
\end{codeexample}

Aquí, |B:D 5| elimina un segmento horizontal en la fila 5, y |C2| quita una piedra.

Los grupos aditivos y sustractivos se alternan con cada |;|, tantas veces como se quiera.

\begin{codeexample}[width=6cm]
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6} % AD
	\end{goban}
	
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6; A1:C4, E6} % AD, SU
	\end{goban}
	
	\begin{goban}[label = {at = all}, partial = A1:E6]
		\stones[b]{A1:E6; A1:C4, E6; A 1:2} % AD, SU, AD
	\end{goban}
\end{codeexample}

En este último ejemplo, se crea un rectángulo, se eliminan dos regiones (|A1:C4| y |E6|), y luego se añade un segmento (|A 1:2|).
