![Как нарисовать сетку, разделенную по диагонали, с помощью TikZ?](https://rvso.com/image/266417/%D0%9A%D0%B0%D0%BA%20%D0%BD%D0%B0%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%B5%D1%82%D0%BA%D1%83%2C%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D0%BF%D0%BE%20%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%2C%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20TikZ%3F.png)
Чтобы нарисовать диаграмму
Я написал следующий код:
\documentclass[11pt]{article}
\usepackage{amsmath,tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0)--(0,8)--(10,8)--(10,0)--(0,0);
\draw (0,7)--(10,7);
\draw (0,6)--(10,6);
\draw (0,5)--(10,5);
\draw (0,4)--(10,4);
\draw (0,3)--(10,3);
\draw (0,2)--(10,2);
\draw (0,1)--(10,1);
\draw (1,0)--(1,8);
\draw (2,0)--(2,8);
\draw (3,0)--(3,8);
\draw (4,0)--(4,8);
\draw (5,0)--(5,8);;
\draw (6,0)--(6,8);
\draw (7,0)--(7,8);
\draw (8,0)--(8,8);
\draw (9,0)--(9,8);
\draw (0,-1)--(10,9);
\end{tikzpicture}
\end{document}
но это производит
Как нарисовать настоящую картинку с помощью TikZ?
решение1
Вы имеете в виду что-то подобное?
Код:
\documentclass[png,border=10pt,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.shapes}
\tikzset{
decorate with/.style args={#1 separated by #2}{
fill,
decorate,decoration={shape backgrounds,shape=#1,shape size=1.5mm,
shape sep={#2, between borders}}
}
}
\pgfkeys{/tikz/.cd,
num quad/.initial=5,
num quad/.get=\numquad,
num quad/.store in=\numquad,
}
\begin{document}
\begin{tikzpicture}[x=0.5025cm,y=0.5025cm,line cap=round]
\foreach \x [count=\xi] in {1,...,\numquad}{
\foreach \y [count=\yi] in {\x,...,\numquad}{
\node [draw, minimum size=0.5cm,outer sep=0pt,inner sep=0pt] (u-\xi\yi) at (\xi,-\yi) {};
}
}
\pgfmathsetmacro\shiftx{\numquad-0.5}
\pgfmathsetmacro\shifty{0.5*(\numquad+1)}
\begin{scope}[xshift=\shiftx cm,yshift=-\shifty cm]
\foreach \x [count=\xi] in {1,...,\numquad}{
\foreach \y [count=\yi] in {\x,...,\numquad}{
\node [draw, minimum size=0.5cm,outer sep=0pt,inner sep=0pt] (d-\xi\yi) at (-\xi,\yi) {};
}
}
\end{scope}
\pgfmathsetmacro\halfnumquad{\numquad/2}
\begin{scope}[xshift=0.25 cm]
\path[decorate with=circle separated by 0.125cm] (\halfnumquad,0.35)--($(\halfnumquad,0.35)+(0,1.5)$) ;
\end{scope}
\begin{scope}[xshift=\shiftx cm,yshift=-0.25cm]
\path[decorate with=circle separated by 0.125cm] (0.35,-\halfnumquad)--($(0.35,-\halfnumquad)+(1.5,0)$) ;
\end{scope}
\draw[very thick] ([yshift=-0.5cm]u-1\numquad.south)--([yshift=0.5cm]d-1\numquad.north);
\end{tikzpicture}
\end{document}
Это решение позволяет выбирать количество квадратов с помощью клавиши num quad
: автоматически, после этого выбора, сдвиги вычисляются. Однако они рассчитаны на , num quad=5
поэтому, возможно, следует сделать некоторую корректировку.
решение2
С помощью PSTricks.
Одинокий:
\documentclass[pstricks]{standalone}
\usepackage{pst-node,multido}
\psset{unit=5mm,dimen=middle,nodesep=-1}
\def\Atom#1{%
\multido{\ix=1+1,\iy=#1+-1}{#1}{%
\psframe(\ix,\iy)
\multips(!-.5 #1 2 div)(-.5,0){3}{\qdisk(0,0){2pt}}}}
\def\Molecule#1{%
\begin{pspicture}(-1,-1)(\numexpr#1+5,\numexpr#1+2)
\rput{-90}(!0 #1){\Atom{#1}}
\rput(!#1 3 add 0){\psscalebox{-1 1}{\Atom{#1}}}
\pcline(!1.5 0)(!#1 1.5 add #1)
\end{pspicture}}
\begin{document}
\Molecule{4}
\end{document}
Несколько:
\documentclass{article}
\usepackage[a4paper,margin=1cm]{geometry}
\usepackage{multicol}
\pagestyle{empty}
\usepackage{pst-node,multido}
\psset{unit=5mm,dimen=middle,nodesep=-1}
\def\Atom#1{%
\multido{\ix=1+1,\iy=#1+-1}{#1}{%
\psframe(\ix,\iy)
\multips(!-.5 #1 2 div)(-.5,0){3}{\qdisk(0,0){2pt}}}}
\def\Molecule#1{%
\begin{pspicture}(-1,-1)(\numexpr#1+5,\numexpr#1+2)
\rput{-90}(!0 #1){\Atom{#1}}
\rput(!#1 3 add 0){\psscalebox{-1 1}{\Atom{#1}}}
\pcline(!1.5 0)(!#1 1.5 add #1)
\end{pspicture}}
\begin{document}
\begin{multicols}{2}
\enumerate
\multido{\i=1+1}{11}{\item \raisebox{-0.5\height}{\Molecule{\i}}}
\endenumerate
\end{multicols}
\end{document}
решение3
Легкий код (некоторые части следующего кода взяты из ответа Qrrbrbirlbel). Основная идея — использовать преобразование с cm={a,b,c,d,(e,f)}
. Здесь отражение, этот метод позволяет избежать дублирования (расширения) кода.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\newcommand\mysubfig[1]{%
\begin{scope}[#1]
\foreach \Row in {1,...,8}{\draw (0,\Row-1) --++(\Row,0) --++(0,8+1-\Row);}
\draw (8,8) -| (0,0);
\foreach \Dot in {0,1,2}{\fill (4,9+\Dot/2) circle [radius=.125cm];}
\end{scope}}
\begin{tikzpicture}
\draw (0,0) -- (10,10);
\mysubfig{shift={(0,2)}}% or cm={1,0,0,1,(0,2)}
\mysubfig{cm={0,1,1,0,(4,2)}]}% exchange x and y then apply a translation (4,2)
\end{tikzpicture}
\end{document}
решение4
Просто ради интереса — матричная версия.
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[row sep=-0.8pt,column sep=-0.8pt,
small boxes/.style={minimum size=3mm,outer sep=0,anchor=base,thick},
execute at empty cell={
\ifnum\numexpr\pgfmatrixcurrentrow+\pgfmatrixcurrentcolumn\relax<12%
\ifnum\numexpr\pgfmatrixcurrentrow+\pgfmatrixcurrentcolumn\relax>9%
\node[small boxes](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
\else
\node[small boxes,draw](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
\fi
\else
\node[small boxes,draw](m-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn){};
\fi
}] (m) {
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
&&&&&&&&&&\\
};
\draw ([yshift=-3mm]m-8-1.south) -- ([yshift=3mm]m-1-11.north);
\foreach \x in {1,2,3}{
\fill ([yshift=2mm+3*\x mm]m-1-4.north east) circle (3pt);
\fill ([xshift=2mm+3*\x mm]m-4-11.south east) circle (3pt);
}
\end{tikzpicture}
\end{document}