Как мне воссоздать этот прямоугольник с помощью линий, точек и меток в LaTeX?

Как мне воссоздать этот прямоугольник с помощью линий, точек и меток в LaTeX?

введите описание изображения здесь

Я просто печатаю это для занятий и был бы признателен за некоторые рекомендации, например, какие пакеты мне понадобятся и с чего начать?

решение1

Есть много пакетов, которые позволяют это сделать: например metapost, pstricks, , asymptote, TikZи, конечно, другие, которые я забыл.

Вот версия с TikZ. Если у вас есть вопросы по коду, я слушаю.

Скриншот

\documentclass[tikz,border=5mm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\fill[gray!20] (0,0)rectangle(3,3);
\draw (0,0)grid(3,3);
\node foreach \j in {1,2} [left] at  (0,\j) {$10^\circ$};
\node foreach \j in {1,2} [right] at  (3,\j) {$40^\circ$};
\node foreach \i in {1,2} [below] at  (\i,0) {$30^\circ$};
\node foreach \i in {1,2} [above] at  (\i,3) {$20^\circ$};
\node foreach \i in {1,2} [above right] at  (\i,2) {$\i$};
\node foreach \lab [count=\n] in {4,3} [above right] at  (\n,1) {$\lab$};
\foreach \list[count=\j from 0] in {{1,2},{0,1,2,3},{0,1,2,3},{1,2}}
 \foreach \x in \list {
 \fill (\x,\j)[cyan] circle (2pt);
 }
\end{tikzpicture}

\end{document}

решение2

Базовый рисунок LaTeX с использованием TikZ: прямоугольник с линиями, точками и метками.

Вам нужен только один пакет:

\usepackage{tikz}

Давайте определим синий и серый цвета для нашей фигуры:

\definecolor{mBlue}{HTML}{1F77B4}
\definecolor{mGray}{HTML}{d7dbdd}

Теперь создайте стиль для точек. Мы не хотим писать много команд и опций снова и снова. Мы назовем этот стиль vertexи используем команду \tikzstyle{vertex}. Из опций мы видим, что это circle, он нарисован цветом, mBlueкоторый мы определили выше, и он также заполнен тем же цветом. Параметры разделения косвенно управляют размером круга и разделением между любым текстом, который вы решите написать внутри узла. Вы также можете использовать minimimum size=0.2.

\tikzstyle{vertex}=[circle,draw=mBlue,fill=mBlue,inner sep=0.6mm, outer sep=0mm]

Мы можем поместить три приведенные выше строки в преамбулу, т. е. «материал» перед \begin{document}.

Теперь мы готовы использовать среду фигуры и рисовать. Наши рисунки будут размещены внутри tikzpictureсреды. Вы заметите, что есть также scaleопция. Ее можно использовать для увеличения/уменьшения размера фигуры. Интересно, что масштабирование не влияет на текст, размещенный внутри фигуры.

\begin{figure}[h]
\centering
\begin{tikzpicture}[scale=1]
 % our drawing goes here
\end{tikzpicture}
\caption{The figure.}
\end{figure}

Теперь самое важное, что вам нужно будет сделать, это назначить некоторые координаты важным точкам на вашей фигуре. Это может показаться пугающим для некоторых поначалу, но это проще, чем кажется. Допустим, мы обозначим нижний левый угол как точку (0,0), а самую верхнюю точку как (3,3). Вы можете использовать команду \coordinate (name) at (<x>,<y>);для каждой из шестнадцати точек на фигуре. Однако я хотел ввести forциклы, потому что многие новые пользователи пропускают эту суперудобную функцию. Я добавил координатную фигуру.

\foreach \x in {0,...,3} {
    \foreach \y in {0,...,3} {
        \coordinate (\x_\y) at (\x,\y);
    }
}

Теперь drawвнешний прямоугольник и линии. Вы можете заполнить прямоугольник, используя draw[fill=mGray].

\draw (0_0) -- (3_0) -- (3_3) -- (0_3) -- (0_0);
\draw (1_0) -- (1_3);
\draw (2_0) -- (2_3);
\draw (0_1) -- (3_1);
\draw (0_2) -- (3_2);

Давайте нарисуем синие точки и добавим к ним метки. Эти метки задают текст. Положение метки можно указать с помощью left, right, below, и above. Мы также можем объединить их в above right.

\node[vertex, label=below:$30^\circ$] at (1_0) {};
\node[vertex, label=below:$30^\circ$] at (2_0) {};
\node[vertex, label=left:$10^\circ$] at (0_1) {};
\node[vertex, label=left:$10^\circ$] at (0_2) {};
\node[vertex, label=above right:$2$] at (2_2) {};

Рисунок сгенерирован из кода. Координатная фигура.

Мы сможем заполнить остальное!

Редактировать: Как указано в комментариях, вы можете напрямую использовать значение координат вместо использования имен, например, напрямую использовать (2,3) вместо (2_3). Вам также не нужно использовать двойные циклы for для определения координат.

решение3

Возможная Asymptoteверсия:

// tab3x3.asy
//
// run  asy tab3x3.asy   to get   tab3x3.pdf
//
settings.tex="pdflatex";
size(4cm);
pen fillPen=rgb("E3E3E5");
pen linePen=rgb("201D1D")+0.7bp;;
pen dotPen =rgb("00A4EC")+4bp;

filldraw(box((-3,-3),(3,3)),fillPen,linePen);
guide mid=box((-1,1),(1,-1));
guide[] net=(-1,3)--(-1,-3)^^(1,3)--(1,-3)^^(-3,-1)--(3,-1)^^(-3,1)--(3,1);
draw(net,linePen);
dot(net,dotPen);

int[] labVal={10,20,30,40};
pair[][] labPos={{(-3,-1),(-3,1)},{(-1,3),(1,3)},{(-1,-3),(1,-3)},{(3,-1),(3,1)}};
pair[] labOff={W,N,S,E};

for(int i=0;i<length(mid);++i){
  dot(point(mid,i),dotPen);
  label("$"+string(i+1)+"$",point(mid,i),plain.NE,linePen);
}

for(int i=0;i<labVal.length;++i){
  for(int j=0;j<labPos[0].length;++j){
    label("$"+string(labVal[i])+"^\circ$",labPos[i][j],labOff[i]);
  }
}

введите описание изображения здесь

решение4

Еще одно простое, «ручное» решение асимптоты

введите описание изображения здесь

// http://asymptote.ualberta.ca/
unitsize(1.5cm);
import math; // for grid
fill(box((0,0),(3,3)),lightgray);
add(grid(3,3));
pair[] pts={(1,2),(2,2),(2,1),(1,1),(0,1),(0,2),(1,3),(2,3),(3,1),(3,2),(2,0),(1,0)};
string[] s={"$10^{\circ}$","$20^{\circ}$","$30^{\circ}$","$40^{\circ}$"} ;
string[] lb={"$1$","$2$","$3$","$4$",s[0],s[0],s[1],s[1],s[2],s[2],s[3],s[3]};
pair[] a={NE,NE,NE,NE,W,W,N,N,E,E,S,S};

for(int i=0; i<pts.length; ++i){
fill(circle(pts[i],.06),magenta);
label(lb[i],align=a[i],pts[i]);
}

shipout(bbox(5mm));

Связанный контент