TikZ - 更改背景的“z 索引”

TikZ - 更改背景的“z 索引”

在下面的代码中,我想将背景放在数字下方,而不是像实际情况那样放在数字下方。

截屏

在此处输入图片描述

代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{graphicx}

% Some customizable styles
\tikzset {
  highlight/.style = {yellow, opacity=0.3},
  digit/.style = { minimum height = 5mm, minimum width=5mm, anchor=center },
  circle/.style = {draw=green!80!black, dotted, very thick},
  cross/.style = {red, opacity=.5, shorten >=1mm, shorten <=1mm, very thick, line cap=round},
  hint/.style={blue, font=\sf, minimum width=3mm, minimum height=3mm}
}

% Original code-----------------------------------------------------------
% Modified the \node to give a unique name to each one, which is the
% row number, a dash and the column number. E.g: 1-1, 4-5, etc.
\newcounter{row}
\newcounter{col}

\newcommand\setrow[9]{
    \setcounter{col}{1}
    \foreach \n in {#1, #2, #3, #4, #5, #6, #7, #8, #9} {
        \edef\x{\value{col} - 0.5}
        \edef\y{9.5 - \value{row}}
        \node[digit,name={\arabic{row}-\arabic{col}}] at (\x, \y) {\n};
        \stepcounter{col}
    }
    \stepcounter{row}
}

% New code -------------------------------------------------------------
\def\highlightcell#1#2{
\fill[highlight] (#1-#2.north west) rectangle (#1-#2.south east);
}

\def\circlecell#1#2{
\draw[circle] (#1-#2) circle(4mm);
}

\def\crosscell#1#2{
\draw[cross] (#1-#2.north west) -- (#1-#2.south east);
\draw[cross] (#1-#2.north east) -- (#1-#2.south west);
}

\def\highlightrow#1{
\fill[highlight] (#1-1.north west) rectangle (#1-9.south east);
}

\def\highlighcolumn#1{
\fill[highlight] (1-#1.north west) rectangle (9-#1.south east);
}

\def\hintcell#1#2#3{
\node at (#1-#2) {\hintbox{#3}};
}

\def\highlightrectangle#1#2#3#4{
\begin{pgfonlayer}{background}
\fill[highlight] (#1-#2.north west) rectangle (#3-#4.south east);
\end{pgfonlayer}
}

% UGLY code. Do not read :-)
\def\hintbox#1{
\resizebox{4.5mm}{4.5mm}{%
\tikz[scale=0.3]{%
  \def\auxc{0}
  \foreach \m in {1,...,9} {
    \pgfmathparse{mod(\auxc,3)}
    \xdef\x{\pgfmathresult}
    \pgfmathparse{-floor(\auxc/3)}
    \xdef\y{\pgfmathresult}
    \xdef\hintprinted{0}
    \foreach \n in {#1} {
      \ifnum\n=\m
       \node[hint] at (\x,\y) {\n};
       \xdef\hintprinted{1}
      \fi
     }
   \ifnum\hintprinted=0
      \node[hint, opacity=0.1] at (\x,\y) {\m};
   \fi
   \pgfmathparse{\auxc+1}
   \xdef\auxc{\pgfmathresult}   }
  }%
 }
}


\begin{document}

\begin{tikzpicture}[scale=.5]
  \begin{scope}
    \draw (0, 0) grid (9, 9);
    \draw[very thick, scale=3] (0, 0) grid (3, 3);

    \setcounter{row}{1}
    \setrow { }{2}{ }  {5}{ }{1}  { }{9}{ }
    \setrow {8}{ }{ }  {2}{ }{3}  { }{ }{6}
    \setrow { }{3}{ }  { }{6}{ }  { }{7}{ }

    \setrow { }{ }{1}  { }{ }{ }  {6}{ }{ }
    \setrow {5}{4}{ }  { }{ }{ }  { }{1}{9}
    \setrow { }{ }{2}  { }{ }{ }  {7}{ }{ }

    \setrow { }{9}{ }  { }{3}{ }  { }{8}{ }
    \setrow {2}{ }{ }  {8}{ }{4}  { }{ }{7}
    \setrow { }{1}{ }  {9}{ }{7}  { }{6}{ }

    \node[anchor=center] at (4.5, -0.5) {Unsolved Sudoku};
    \highlightcell{2}{8};
    \highlightrow{8}
    \highlighcolumn{5}
    \circlecell{5}{2}
    \crosscell{8}{1}
    \hintcell{5}{5}{2,7,8}
    \hintcell{1}{1}{3,4,6,7}
    \highlightrectangle{4}{1}{6}{3}
  \end{scope}
\end{tikzpicture}

\end{document}

代码来自这个答案

答案1

on background layer在每个绘制背景的命令中使用带有选项的范围:

在此处输入图片描述

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{graphicx}

% Some customizable styles
\tikzset {
  highlight/.style = {yellow, opacity=0.3},
  digit/.style = { minimum height = 5mm, minimum width=5mm, anchor=center },
  circle/.style = {draw=green!80!black, dotted, very thick},
  cross/.style = {red, opacity=.5, shorten >=1mm, shorten <=1mm, very thick, line cap=round},
  hint/.style={blue, font=\sf, minimum width=3mm, minimum height=3mm}
}

% Original code-----------------------------------------------------------
% Modified the \node to give a unique name to each one, which is the
% row number, a dash and the column number. E.g: 1-1, 4-5, etc.
\newcounter{row}
\newcounter{col}

\newcommand\setrow[9]{
    \setcounter{col}{1}
    \foreach \n in {#1, #2, #3, #4, #5, #6, #7, #8, #9} {
        \edef\x{\value{col} - 0.5}
        \edef\y{9.5 - \value{row}}
        \node[digit,name={\arabic{row}-\arabic{col}}] at (\x, \y) {\n};
        \stepcounter{col}
    }
    \stepcounter{row}
}

% New code -------------------------------------------------------------
\def\highlightcell#1#2{
  \begin{scope}[on background layer]
    \fill[highlight] (#1-#2.north west) rectangle (#1-#2.south east);
  \end{scope}
}

\def\circlecell#1#2{
\draw[circle] (#1-#2) circle(4mm);
}

\def\crosscell#1#2{
\draw[cross] (#1-#2.north west) -- (#1-#2.south east);
\draw[cross] (#1-#2.north east) -- (#1-#2.south west);
}

\def\highlightrow#1{
  \begin{scope}[on background layer]
    \fill[highlight] (#1-1.north west) rectangle (#1-9.south east);
  \end{scope}
}

\def\highlighcolumn#1{
  \begin{scope}[on background layer]
    \fill[highlight] (1-#1.north west) rectangle (9-#1.south east);
  \end{scope}
}

\def\hintcell#1#2#3{
\node at (#1-#2) {\hintbox{#3}};
}

\def\highlightrectangle#1#2#3#4{
  \begin{scope}[on background layer]
    \fill[highlight] (#1-#2.north west) rectangle (#3-#4.south east);
  \end{scope}
}

% UGLY code. Do not read :-)
\def\hintbox#1{
\resizebox{4.5mm}{4.5mm}{%
\tikz[scale=0.3]{%
  \def\auxc{0}
  \foreach \m in {1,...,9} {
    \pgfmathparse{mod(\auxc,3)}
    \xdef\x{\pgfmathresult}
    \pgfmathparse{-floor(\auxc/3)}
    \xdef\y{\pgfmathresult}
    \xdef\hintprinted{0}
    \foreach \n in {#1} {
      \ifnum\n=\m
       \node[hint] at (\x,\y) {\n};
       \xdef\hintprinted{1}
      \fi
     }
   \ifnum\hintprinted=0
      \node[hint, opacity=0.1] at (\x,\y) {\m};
   \fi
   \pgfmathparse{\auxc+1}
   \xdef\auxc{\pgfmathresult}   }
  }%
 }
}


\begin{document}
\begin{tikzpicture}[scale=.5]
  \begin{scope}
    \draw (0, 0) grid (9, 9);
    \draw[very thick, scale=3] (0, 0) grid (3, 3);

    \setcounter{row}{1}
    \setrow { }{2}{ }  {5}{ }{1}  { }{9}{ }
    \setrow {8}{ }{ }  {2}{ }{3}  { }{ }{6}
    \setrow { }{3}{ }  { }{6}{ }  { }{7}{ }

    \setrow { }{ }{1}  { }{ }{ }  {6}{ }{ }
    \setrow {5}{4}{ }  { }{ }{ }  { }{1}{9}
    \setrow { }{ }{2}  { }{ }{ }  {7}{ }{ }

    \setrow { }{9}{ }  { }{3}{ }  { }{8}{ }
    \setrow {2}{ }{ }  {8}{ }{4}  { }{ }{7}
    \setrow { }{1}{ }  {9}{ }{7}  { }{6}{ }

    \node[anchor=center] at (4.5, -0.5) {Unsolved Sudoku};
    \highlightcell{2}{8};
    \highlightrow{8}
    \highlighcolumn{5}
    \circlecell{5}{2}
    \crosscell{8}{1}
    \hintcell{5}{5}{2,7,8}
    \hintcell{1}{1}{3,4,6,7}
    \highlightrectangle{4}{1}{6}{3}
  \end{scope}
\end{tikzpicture}
\end{document}

相关内容