\ExplSyntaxOn \usepackage{tikz} \bool_set_false:N\l_pgfgo_goban_partial_bool \tl_set:Nn\l_pgfgo_goban_from_x_tl{1} \tl_set:Nn\l_pgfgo_goban_from_y_tl{1} \tl_set:Nn\l_pgfgo_goban_to_x_tl{9} \tl_set:Nn\l_pgfgo_goban_to_y_tl{9} %GRID \bool_set_true:N\l_pgfgo_goban_grid_bool \dim_new:N\l_pgfgo_goban_grid_line_width_dim \dim_new:N\l_pgfgo_goban_grid_x_sep_dim \dim_new:N\l_pgfgo_goban_grid_y_sep_dim %BORDER \bool_set_true:N\l_pgfgo_goban_border_bool \bool_set_true:N\l_pgfgo_goban_border_line_bool \bool_set_true:N\l_pgfgo_goban_border_fill_bool \dim_new:N\l_pgfgo_goban_border_sep_dim \dim_set:Nn\l_pgfgo_goban_border_sep_dim{\fp_to_dim:n{\l_pgfgo_players_stone_radius_dim * 1.5}} \dim_new:N\l_pgfgo_goban_border_line_width_dim \dim_new:N\l_pgfgo_goban_border_rounded_corners_dim \dim_new:N\l_pgfgo_goban_border_inner_rounded_corners_dim %LABEL \tl_set:Nn\l_pgfgo_goban_labels_color_tl{black} \dim_new:N\l_pgfgo_goban_labels_sep_dim \dim_set:Nn\l_pgfgo_goban_labels_sep_dim{0.5em} \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool \tl_new:N \l_pgfgo_goban_label_font_tl %LAYERS \pgfdeclarelayer{pgfgo_layer_goban_border} \pgfdeclarelayer{pgfgo_layer_goban_grid} \pgfdeclarelayer{pgfgo_layer_goban_labels} \pgfdeclarelayer{pgfgo_layer_territory} \pgfdeclarelayer{pgfgo_layer_mark_shadow} \pgfdeclarelayer{pgfgo_layer_stone} \pgfdeclarelayer{pgfgo_layer_stone_mark} \pgfdeclarelayer{pgfgo_layer_mark} \keys_define:nn {pgfgo / goban}{ new~remember .code:n = { \seq_gclear:N\l_pgfgo_goban_elements_stack_seq \bool_set_true:N\l_pgfgo_goban_remember_new_bool \bool_set_true:N\l_pgfgo_goban_remember_add_bool \pgfgo_goban_remember_all: }, remember .code:n = { \bool_set_false:N\l_pgfgo_goban_remember_new_bool \bool_set_true:N\l_pgfgo_goban_remember_add_bool \pgfgo_goban_remember_all: }, forget .code:n = { \bool_set_false:N\l_pgfgo_goban_remember_new_bool \bool_set_false:N\l_pgfgo_goban_remember_add_bool \pgfgo_goban_remember_nothing: }, resume .code:n = {\bool_set_true:N\l_pgfgo_goban_resume_bool}, grid .code:n = {\keys_set:nx{pgfgo / goban / grid} {#1}}, border .code:n = {\keys_set:nx{pgfgo / goban / border} {#1}}, %DEPRECATED background .code:n = {\keys_set:nx{pgfgo / goban / background} {#1}}, label .code:n = {\keys_set:nx{pgfgo / goban / label} {#1}}, partial .code:n = { \bool_set_true:N\l_pgfgo_goban_partial_bool \keys_set:nx{pgfgo / goban / partial} {#1}}, scale .tl_set:N = \l_pgfgo_goban_scale_tl, scale .initial:n = {1}, size .code:n = {\pgfgo_parse_goban_size:n{#1}}, use~i .bool_set:N = \l_pgfgo_use_i_bool, use~i .default:n = {true}, unknown .code:n = {\pgfgo_parse_goban_size:V\l_keys_key_str},%INTERNTA PARSEAR EL SIZE } \keys_define:nn {pgfgo / goban / grid}{ false .bool_set:N = \l_pgfgo_goban_grid_bool, false .default:n = {false}, line .code:n = {\keys_set:nn {pgfgo / goban / grid / line} {#1}}, x~sep .dim_set:N = \l_pgfgo_goban_grid_x_sep_dim, y~sep .dim_set:N = \l_pgfgo_goban_grid_y_sep_dim, sep .code:n = {\keys_set:nn{pgfgo / goban / grid}{x~sep = #1, y~sep = #1}}, sep .initial:n = {1.25em}, } \keys_define:nn {pgfgo / goban / grid / line} { color .tl_set:N = \l_pgfgo_goban_grid_color_tl, color .initial:n = {black}, opacity .tl_set:N = \l_pgfgo_goban_grid_opacity_tl, opacity .initial:n = {1}, width .dim_set:N = \l_pgfgo_goban_grid_line_width_dim, width .initial:n = {0.55pt} } \keys_define:nn {pgfgo / goban / background}{ false .bool_set:N = \l_pgfgo_goban_border_bool, false .default:n = {false}, sep .dim_set:N = \l_pgfgo_goban_border_sep_dim, sep .initial:n = {0.825em}, line .code:n = {\keys_set:nn {pgfgo / goban / background / line} {#1}}, fill .code:n = {\keys_set:nn {pgfgo / goban / background / fill} {#1}}, rounded~corners .code:n = {\keys_set:nn {pgfgo / goban / background / rounded~corners} {#1}}, drop~shadow .code:n = {\keys_set:nn {pgfgo / goban / background / drop~shadow} {#1}}, drop~shadow .default:n = {true} } \keys_define:nn {pgfgo / goban / background / rounded~corners } { inner .dim_set:N = \l_pgfgo_goban_border_inner_rounded_corners_dim, inner .initial:n = {0pt}, outer .dim_set:N = \l_pgfgo_goban_border_rounded_corners_dim, outer .initial:n = {0pt}, unknown .code:n = { \dim_set:Nn\l_pgfgo_goban_border_rounded_corners_dim {\l_keys_key_str} \dim_set:Nn\l_pgfgo_goban_border_inner_rounded_corners_dim {\l_keys_key_str} }, } \bool_new:N \l_pgfgo_goban_background_drop_shadow_bool \fp_new:N \l_pgfgo_goban_background_drop_shadow_angle_fp \dim_new:N \l_pgfgo_goban_background_drop_shadow_offset_dim \fp_new:N \l_pgfgo_goban_background_drop_shadow_opacity_fp \tl_new:N \l_pgfgo_goban_background_drop_shadow_color_tl \keys_define:nn {pgfgo / goban / background / drop~shadow} { true .bool_set:N = \l_pgfgo_goban_background_drop_shadow_bool, true .default:n = {true}, false .bool_set:N = \l_pgfgo_goban_background_drop_shadow_bool, false .default:n = {false}, angle .fp_set:N = \l_pgfgo_goban_background_drop_shadow_angle_fp, angle .initial:n = {-45}, offset .dim_set:N = \l_pgfgo_goban_background_drop_shadow_offset_dim, offset .initial:n = {1.5pt}, opacity .fp_set:N = \l_pgfgo_goban_background_drop_shadow_opacity_fp, opacity .initial:n = {0.5}, color .tl_set:N = \l_pgfgo_goban_background_drop_shadow_color_tl, color .initial:n = {black}, } % %\keys_define:nn {pgfgo / goban / background / custom}{ % source .tl_set:N = , % % scale .pf_set:N = , % x~scale .pf_set:N = , % y~scale .pf_set:N = , % x~shift .pf_set:N = , % y~shift .pf_set:N = , %} \keys_define:nn {pgfgo / goban / background / line}{ color .tl_set:N = \l_pgfgo_goban_border_color_tl, color .initial:n = {black}, opacity .tl_set:N = \l_pgfgo_goban_border_opacity_tl, opacity .initial:n = {1}, width .dim_set:N = \l_pgfgo_goban_border_line_width_dim, width .initial:n = {0.75pt}, false .code:n = {\bool_set_false:N\l_pgfgo_goban_border_line_bool}, true .code:n = {\bool_set_true:N\l_pgfgo_goban_border_line_bool}, } \keys_define:nn {pgfgo / goban / background / fill}{ color .tl_set:N = \l_pgfgo_goban_border_fill_color_tl, color .initial:n = {white}, opacity .tl_set:N = \l_pgfgo_goban_border_fill_opacity_tl, opacity .initial:n = {1}, false .code:n = {\bool_set_false:N\l_pgfgo_goban_border_fill_bool}, true .code:n = {\bool_set_true:N\l_pgfgo_goban_border_fill_bool}, } \keys_define:nn {pgfgo / goban / label} { false .code:n = { \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool }, text~color .tl_set:N = \l_pgfgo_goban_labels_color_tl, sep .dim_set:N = \l_pgfgo_goban_labels_sep_dim, font .tl_set:N = \l_pgfgo_goban_label_font_tl, at .code:n = {\keys_set:nx{pgfgo / goban / label / at} {#1}} } \keys_define:nn {pgfgo / goban / label / at} { all .code:n = { \bool_set_true:N\l_pgfgo_goban_labels_pos_north_bool \bool_set_true:N\l_pgfgo_goban_labels_pos_east_bool \bool_set_true:N\l_pgfgo_goban_labels_pos_south_bool \bool_set_true:N\l_pgfgo_goban_labels_pos_west_bool }, none .code:n = { \bool_set_false:N\l_pgfgo_goban_labels_pos_north_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_east_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_south_bool \bool_set_false:N\l_pgfgo_goban_labels_pos_west_bool }, north .bool_set:N = \l_pgfgo_goban_labels_pos_north_bool, north .default:n = {true}, east .bool_set:N = \l_pgfgo_goban_labels_pos_east_bool, east .default:n = {true}, south .bool_set:N = \l_pgfgo_goban_labels_pos_south_bool, south .default:n = {true}, west .bool_set:N = \l_pgfgo_goban_labels_pos_west_bool, west .default:n = {true}, above .bool_set:N = \l_pgfgo_goban_labels_pos_north_bool, above .default:n = {true}, right .bool_set:N = \l_pgfgo_goban_labels_pos_east_bool, right .default:n = {true}, below .bool_set:N = \l_pgfgo_goban_labels_pos_south_bool, below .default:n = {true}, left .bool_set:N = \l_pgfgo_goban_labels_pos_west_bool, left .default:n = {true}, } \int_new:N\l_pgfgo_goban_tmp_from_x_int \int_new:N\l_pgfgo_goban_tmp_from_y_int \int_new:N\l_pgfgo_goban_tmp_to_x_int \int_new:N\l_pgfgo_goban_tmp_to_y_int \keys_define:nn {pgfgo / goban / partial}{ from .code:n = { \pgfgo_parse_goban_partial_from:n{#1} \pgfgo_parse_coordinate:x {\l_temp_a_tl} \int_set:Nn\l_pgfgo_goban_tmp_from_x_int {\l_pgfgo_parsed_x_coordinate_tl} \int_set:Nn\l_pgfgo_goban_tmp_from_y_int {\l_pgfgo_parsed_y_coordinate_tl} \pgfgo_parse_coordinate:x {\l_temp_b_tl} \int_set:Nn\l_pgfgo_goban_tmp_to_x_int {\l_pgfgo_parsed_x_coordinate_tl} \int_set:Nn\l_pgfgo_goban_tmp_to_y_int {\l_pgfgo_parsed_y_coordinate_tl} }, false .bool_set:N = \l_pgfgo_goban_partial_bool, false .default:n = {false} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------------------------------goban-----------------------------------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \int_new:N \l_pgfgo_goban_to_x_int \int_new:N \l_pgfgo_goban_to_y_int \int_new:N \l_pgfgo_goban_from_x_int \int_new:N \l_pgfgo_goban_from_y_int \cs_generate_variant:Nn \int_compare_p:nNn {fNn} \cs_generate_variant:Nn \__pgfgo_goban:nnn {nVV} \int_new:N\l_pgfgo_goban_labels_current_x_int \int_new:N\l_pgfgo_goban_labels_current_y_int \cs_new:Npn\__pgfgo_goban:nnn #1#2#3 { \group_begin: \pgfsetlayers{ pgfgo_layer_goban_border, pgfgo_layer_goban_grid, pgfgo_layer_goban_labels, pgfgo_layer_territory, pgfgo_layer_mark_shadow, pgfgo_layer_stone, pgfgo_layer_stone_mark, pgfgo_layer_mark, main } %--------------------------------------------------- \bool_if:NTF\l_pgfgo_goban_partial_bool{ \int_set:Nn\l_pgfgo_goban_from_x_int {\int_min:nn{\l_pgfgo_goban_tmp_from_x_int}{\l_pgfgo_goban_tmp_to_x_int}} \int_set:Nn\l_pgfgo_goban_from_y_int {\int_min:nn{\l_pgfgo_goban_tmp_from_y_int}{\l_pgfgo_goban_tmp_to_y_int}} \int_set:Nn\l_pgfgo_goban_to_x_int {\int_max:nn{\l_pgfgo_goban_tmp_from_x_int}{\l_pgfgo_goban_tmp_to_x_int}} \int_set:Nn\l_pgfgo_goban_to_y_int {\int_max:nn{\l_pgfgo_goban_tmp_from_y_int}{\l_pgfgo_goban_tmp_to_y_int}} }{ \int_set:Nn\l_pgfgo_goban_from_x_int {1} \int_set:Nn\l_pgfgo_goban_from_y_int {1} \int_set:Nn\l_pgfgo_goban_to_x_int {#2} \int_set:Nn\l_pgfgo_goban_to_y_int {#3} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %-----------------TIKZ PICTURE---------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \tikzpicture \pgfsetxvec{\pgfpoint{ \l_pgfgo_goban_grid_x_sep_dim}{0}} \pgfsetyvec{\pgfpoint{0}{ \l_pgfgo_goban_grid_y_sep_dim}} \pgftransformscale{\l_pgfgo_goban_scale_tl} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------BORDER AND FILL-------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfonlayer{pgfgo_layer_goban_border} \bool_if:NT\l_pgfgo_goban_border_bool{ \pgfscope \pgfsetlinewidth{\l_pgfgo_goban_border_line_width_dim} \pgfsetstrokecolor{\l_pgfgo_goban_border_color_tl} \pgfsetstrokeopacity{\l_pgfgo_goban_border_opacity_tl} \pgfsetfillcolor{\l_pgfgo_goban_border_fill_color_tl} \pgfsetfillopacity{\l_pgfgo_goban_border_fill_opacity_tl} % \pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}} %--------DROP SHADOW \bool_if:NT \l_pgfgo_goban_background_drop_shadow_bool { \pgfscope \pgftransformshift{ \pgfpointpolar {\fp_to_decimal:N\l_pgfgo_goban_background_drop_shadow_angle_fp} {\l_pgfgo_goban_background_drop_shadow_offset_dim}} \pgfpathmoveto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_from_y_int}}{ \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_from_y_int}}{ \pgfpoint{\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int}}{ \pgfpoint{\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} && \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_y_int}}{ \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} && \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathclose \pgfsetfillcolor{\l_pgfgo_goban_background_drop_shadow_color_tl} \pgfsetfillopacity{\fp_to_decimal:N\l_pgfgo_goban_background_drop_shadow_opacity_fp} \pgfusepath{fill} \endpgfscope } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %FONDO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfpathmoveto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_from_y_int}}{ \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_from_y_int}}{ \pgfpoint{\l_pgfgo_goban_border_sep_dim}{-\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_to_x_int}={#2} && \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int}}{ \pgfpoint{\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} && \int_compare_p:nNn{\l_pgfgo_goban_to_y_int}={#3}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathlineto{ \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_from_x_int}{\l_pgfgo_goban_to_y_int}}{ \pgfpoint{-\l_pgfgo_goban_border_sep_dim}{\l_pgfgo_goban_border_sep_dim}} } \bool_if:nTF {\int_compare_p:nNn{\l_pgfgo_goban_from_x_int}={1} && \int_compare_p:nNn{\l_pgfgo_goban_from_y_int}={1}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_rounded_corners_dim}{\l_pgfgo_goban_border_rounded_corners_dim}}} {\pgfsetcornersarced{\pgfpoint{\l_pgfgo_goban_border_inner_rounded_corners_dim}{\l_pgfgo_goban_border_inner_rounded_corners_dim}}} \pgfpathclose \pgfusepath{\bool_if:NT\l_pgfgo_goban_border_line_bool{stroke}, \bool_if:NT\l_pgfgo_goban_border_fill_bool{fill}} \endpgfscope } \endpgfonlayer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------------GRID------------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfonlayer{pgfgo_layer_goban_grid} \pgfscope \bool_if:NT\l_pgfgo_goban_partial_bool{ \pgfpathrectanglecorners {\pgfpointxy{\int_use:N\l_pgfgo_goban_from_x_int-0.5}{\int_use:N\l_pgfgo_goban_from_y_int-0.5}} {\pgfpointxy{\int_use:N\l_pgfgo_goban_to_x_int+0.5}{\int_use:N\l_pgfgo_goban_to_y_int+0.5}} \pgfusepath{clip} } \bool_if:NT\l_pgfgo_goban_grid_bool{ \pgfscope \pgfsetstrokecolor{\l_pgfgo_goban_grid_color_tl} \pgfsetstrokeopacity{\l_pgfgo_goban_grid_opacity_tl} \pgfsetlinewidth{\l_pgfgo_goban_grid_line_width_dim} \pgfsetroundcap \pgfpathgrid[step = \pgfpointxy{1}{1}] {\pgfpointxy{1}{1}}{\pgfpointxy{#2}{#3}} \pgfusepath{stroke} \endpgfscope } \endpgfscope \endpgfonlayer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------------LABELS----------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \int_log:N\l_pgfgo_goban_from_x_int \int_log:N\l_pgfgo_goban_from_y_int \int_log:N\l_pgfgo_goban_to_x_int \int_log:N\l_pgfgo_goban_to_y_int \pgfonlayer{pgfgo_layer_goban_labels} \pgfscope \pgfsetcolor{\l_pgfgo_goban_labels_color_tl} \bool_if:NT\l_pgfgo_goban_labels_pos_north_bool{ \foreach \x in {\l_pgfgo_goban_from_x_int,...,\l_pgfgo_goban_to_x_int}{ \int_set:Nx\l_pgfgo_goban_labels_current_x_int{\x} \bool_if:NF\l_pgfgo_use_i_bool{ \int_compare:nNnT{\l_pgfgo_goban_labels_current_x_int}>{8}{ \int_incr:N\l_pgfgo_goban_labels_current_x_int }} \pgftext[at = \pgfpointadd {\pgfpointxy{\x}{\l_pgfgo_goban_to_y_int}} {\pgfpoint{0}{\l_pgfgo_goban_labels_sep_dim + \l_pgfgo_players_stone_radius_dim + 0.5em}} ] {{ \sffamily\int_to_Alph:n{\l_pgfgo_goban_labels_current_x_int} }}} } \bool_if:NT\l_pgfgo_goban_labels_pos_east_bool{ \int_step_variable:nnNn {\l_pgfgo_goban_from_y_int} {\l_pgfgo_goban_to_y_int}\variable { \pgftext[at = \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_to_x_int}{\variable}}{ \pgfpoint{\l_pgfgo_goban_labels_sep_dim+\l_pgfgo_players_stone_radius_dim+0.5em}{0}} ] {{ \sffamily\variable }} } } \bool_if:NT\l_pgfgo_goban_labels_pos_south_bool{ \foreach \x in {\l_pgfgo_goban_from_x_int,...,\l_pgfgo_goban_to_x_int}{ \int_set:Nx\l_pgfgo_goban_labels_current_x_int{\x} \bool_if:NF\l_pgfgo_use_i_bool{ \int_compare:nNnT{\l_pgfgo_goban_labels_current_x_int}>{8}{ \int_incr:N\l_pgfgo_goban_labels_current_x_int }} \pgftext[at = \pgfpointadd{ \pgfpointxy{\x}{\l_pgfgo_goban_from_y_int}}{ \pgfpoint{0}{-\l_pgfgo_goban_labels_sep_dim-\l_pgfgo_players_stone_radius_dim-0.5em}} ] {{ \sffamily\int_to_Alph:n{\l_pgfgo_goban_labels_current_x_int} }}} } \bool_if:NT\l_pgfgo_goban_labels_pos_west_bool{ \int_step_variable:nnNn {\l_pgfgo_goban_from_y_int} {\l_pgfgo_goban_to_y_int} \variable { \pgftext[at = \pgfpointadd{ \pgfpointxy{\l_pgfgo_goban_from_x_int}{\variable}}{ \pgfpoint{-\l_pgfgo_goban_labels_sep_dim-\l_pgfgo_players_stone_radius_dim-0.5em}{0}} ] {{ \sffamily\variable }} } } \endpgfscope \endpgfonlayer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------------RESUME----------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \bool_if:NT\l_pgfgo_goban_resume_bool{ \seq_map_inline:Nn \l_pgfgo_goban_elements_stack_seq {##1}} } \cs_new:Npn\__end_pgfgo_goban: { \endtikzpicture \group_end: \int_set:Nn\l_pgfgo_move_from_int{1} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %------------------------------------------LATEX------------------------------------------------% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NewDocumentEnvironment{goban}{O{}}{ \keys_set:nn {pgfgo / goban} {#1} \__pgfgo_goban:nVV{}{\l_pgfgo_goban_to_x_int}{\l_pgfgo_goban_to_y_int} }{\__end_pgfgo_goban:} \ExplSyntaxOff