Как это работает?

Как это работает?

Я хочу воссоздать следующую таблицу на латексе

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

Вот мой MWE

\documentclass{article} 
\usepackage{colortbl}

\begin{document}
\begin{table}[h]
 \begin{tabular}{|>{\columncolor[gray]{.8}}c|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|}
   \hline
  \footnotesize{ $x$ } & 0.900 & 0.990 & 0.999 & 1.000 & 1.001 & 1.010 & 1.100 \\ \hline
  \footnotesize{ $f(x)$} & 1.810 & 1.980 & 1.998 & 2.000 & 2.002 & 2.020 & 2.210 \\ \hline
 \end{tabular}
 \end{table}
\end{document} 

решение1

С помощью TikZ можно рисовать.

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

\documentclass[tikz,border=5mm]{standalone}
% put a row of 8 elements
\newcommand{\putrow}[9]{
\path (0,#1) node{#2}
++(0:1) node{#3} ++(0:1) node{#4}
++(0:1) node{#5} ++(0:1) node{#6} 
++(0:1) node{#7} ++(0:1) node{#8} ++(0:1) node{#9};
}

\begin{document}
\begin{tikzpicture}[xscale=1.4,yscale=.6]
\begin{scope}[shift={(-.5,.5)}]
\fill[cyan!30] (0,0) rectangle +(1,-2);
\draw (0,0) grid (8,-2);
\end{scope}
\begin{scope}[-stealth,magenta,shorten >=.5pt,
every node/.style={midway,scale=.8}]
\draw[shift={(90:1)}] (1,0)--(4,0)    node[above]{$x$ approaches $1$};
\draw[shift={(90:1)}] (7,0)--(4,0)    node[above]{$x$ approaches $1$};
\draw[shift={(-90:2)}] (1,0)--(4,0)   node[below]{$f(x)$ approaches $2$};
\draw[shift={(-90:2)}] (7,0)--(4,0)   node[below]{$f(x)$ approaches $2$};
\end{scope}

\putrow{0}{$x$}{0.900}{0.990}{0.999}{1.000}{1.001}{1.010}{1.100}
\putrow{-1}{$f(x)$}{1.810}{1.980}{1.998}{2.000}{2.002}{2.020}{2.210}
\end{tikzpicture}
\end{document}

ПС(Июль 2020 г.) Я добавляю matrixверсию рисунка, несколько похожую на код Зарко.

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

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of math nodes,
nodes={draw,minimum height=4ex,minimum width=3.3em,anchor=center},
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
column 1/.style ={nodes={fill=orange!30}}
]{
x   & 0.900 & 0.990 & 0.999 & 1.000 & 1.001 & 1.010 & 1.100 \\ 
f(x)& 1.810 & 1.980 & 1.998 & 2.000 & 2.002 & 2.020 & 2.210 \\
};

\def\d{.6}
\begin{scope}[-stealth,orange,shorten >=.5pt,
every node/.style={midway,scale=.8}]
\draw ([shift={(90:\d)}]m-1-2.center)--([shift={(90:\d)}]m-1-5.center)    
node[above]{$x$ approaches $1$};
\draw ([shift={(90:\d)}]m-1-8.center)--([shift={(90:\d)}]m-1-5.center)    
node[above]{$x$ approaches $1$};
\draw ([shift={(-90:\d)}]m-2-2.center)--([shift={(-90:\d)}]m-2-5.center)   
node[below]{$f(x)$ approaches $2$};
\draw ([shift={(-90:\d)}]m-2-8.center)--([shift={(-90:\d)}]m-2-5.center)   
node[below]{$f(x)$ approaches $2$};
\end{scope}
\end{tikzpicture}
\end{document}

решение2

Также с tikz, но теперь с использованием библиотеки matrix. Для стрелок используются метки ребер arrows.metaи quotedбиблиотеки:

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{arrows.meta,
                matrix,
                quotes
                }

\begin{document}
    \begin{tikzpicture}[
every edge/.style = {draw, purple, -{Straight Barb[angle=60:2pt 3]}, semithick}, shorten >=1pt,
every edge quoetes/.style = {font=\footnotesize}
                        ]
\matrix (m) [matrix of math nodes,
             nodes = {draw, minimum height=4ex, minimum width=3.3em, 
                      inner sep=0pt, outer sep=0pt, anchor=center},
             column sep=-\pgflinewidth,
             row sep=-\pgflinewidth,
             column 1/.append style = {nodes={fill=cyan!30}}
            ]
{
 x   & 0.900 & 0.990 & 0.999 & 1.000 & 1.001 & 1.010 & 1.100    \\ 
f(x) & 1.810 & 1.980 & 1.998 & 2.000 & 2.002 & 2.020 & 2.210    \\
};
\draw   (m-1-2.north |- m.north) edge["$x$ approaches $1$"] (m-1-5.north |- m.north)
        (m-1-8.north |- m.north) edge["$f(x)$ approaches $1$" '] (m-1-5.north |- m.north)
        (m-1-2.south |- m.south) edge["$x$ approaches $2$" '] (m-1-5.north |- m.south)
        (m-1-8.south |- m.south) edge["$f(x)$ approaches $2$"] (m-1-5.north |- m.south);
    \end{tikzpicture}
\end{document}

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

решение3

Я написалдва макроса( \valeurи \fromto) чтоавтоматическипоместите стрелкувышепуть и текствышестрелка илинижев зависимости от того, идет ли путь отслева направоили нет.

Его преимущество в том, что он позволяет добавлять стрелки к любому массиву, записанному с помощью специализированного пакета, например array, tabularили любого другого пакета, предназначенного для записи массивов. Это позволяет избежать необходимости переписывать код уже созданной таблицы.

Например:

Стрелка всегда расположена налевая сторонав направлении построенного пути. То есть: выше, когда путь идет отслева направои ниже в противном случае. Текст автоматически размещается выше или ниже стрелки.

пример

\documentclass{article} 
\usepackage{tikz}
\usetikzlibrary{calc,arrows.meta}

\newcommand{\valeur}[2]{
    \tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}
\newcommand{\fromto}[4][]{
\tikz[remember picture,overlay,auto=left,>={Stealth[length=5pt, inset=1pt,sep]}]
    \path[draw,thick,#1]($(#2.center)!5mm!90:(#3.center)$)--($(#3.center)!5mm!-90:(#2.center)$)node[midway]{#4};}

\begin{document}

 \begin{tikzpicture}[remember picture]
 \node[] (A)at(0,0){A};
 \node[] (B) at (8,0){B};
 \draw[densely dotted](A)--(B)node[midway,fill=white]{path from A to B};
 \end{tikzpicture}
 
\fromto[align=center,dashed,->,blue] {A}{B}{from A to B:\\ the arrow is \textbf{above} the path A--B \\ the text is \textbf{above} the arrow}
\fromto[align=center,dashed,->,red] {B}{A}{from B to A:\\ line arrow is \textbf{below} the path A--B,\\ the text is \textbf{below} the arrow}

\end{document}

Код и результат (компилируется дважды):

Скриншот

\documentclass{article} 
\usepackage{colortbl}
\usepackage{tikz}
\definecolor{myviolet}{RGB}{243,29,143}
\usetikzlibrary{calc,arrows.meta}

\newcommand{\valeur}[2]{
    \tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}
\newcommand{\fromto}[4][]{
\tikz[remember picture,overlay,auto=left,>={Stealth[length=5pt, inset=1pt,sep]}]
    \path[draw=myviolet,thick,#1]
    ($(#2.center)!5mm!90:(#3.center)$)--($(#3.center)!5mm!-90:(#2.center)$)node[midway,myviolet,font=\bf]{#4};}

\begin{document}
\begin{table}[h]
 \begin{tabular}{|>{\columncolor[gray]{.8}}c|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|m{1cm}|}
   \hline
  \footnotesize{ $x$ } & \valeur{a1}{0.900} & 0.990 & 0.999 & \valeur{b1}{1.000} & 1.001 & 1.010 & \valeur{c1}{1.100} \\ \hline
  \footnotesize{ $f(x)$} & \valeur{a2}{1.810} & 1.980 & 1.998 & \valeur{b2}{2.000} & 2.002 & 2.020 & \valeur{c2}{2.210} \\ \hline
 \end{tabular}
 \end{table}
 
\fromto[->] {a1}{b1}{$x$ approaches 1.}
\fromto[<-] {b1}{c1}{$x$ approaches 1.}
\fromto[<-] {b2}{a2}{$f(x)$ approaches 2.}
\fromto[->] {c2}{b2}{$f(x)$ approaches 2.}

\end{document}

Первый макрос называется valeur:

отмечает начало и конец стрелки символом TikZ nodeи отображает значение, содержащееся в ячейке таблицы.

\newcommand{\valeur}[2]{
        \tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}

У него есть два аргумента:

  • первый #1- этоимямы даемnode
  • второе #2- этоценитьэтого node.

Второй макрос называется \fromto:

Этот макрос всегда размещает стрелку слева по направлению пути. Выше, когда путь идет отслева направои ниже в противном случае. Этот макрос имеет 4 аргумента:

  • первый #1необязателен и позволяет передавать параметры TikZ в путь< варианты>
  • второе #2- отправная точка<от>
  • третий #3- пункт прибытия< к>
  • четвертый #4— текст, который нужно разместить< текст>
\newcommand{\fromto}[4][]{
\tikz[remember picture,overlay,auto=left,>={Stealth[length=5pt, inset=1pt,sep]}]
    \path[draw=myviolet,thick,#1]
    ($(#2.center)!5mm!90:(#3.center)$)--($(#3.center)!5mm!-90:(#2.center)$)node[midway,myviolet,font=\bf]{#4};}

Как это работает?

Принцип следующий: если путь идетслева направо, стрелка и текст размещаютсявышепуть,в противном случаеон размещенниже. Готовобезлюбые тесты позиционирования, но с использованиемсвойства вращений Это позволяет избежать использования двух вариантов, которые фактически бесполезны:

  • один для размещения стрелок (вверх или вниз)
  • а также один из вариантов размещения текста относительно этих стрелок (выше или ниже).

Вращения

В геометрии положительный угол — это вращение против часовой стрелки. Отрицательный угол — это вращение по часовой стрелке.

углы

Слева направо

Когда путь идет слева направо (т.е. от точки А к точке В), точки, расположенные на расстоянии 5 мм друг от друга, поворачиваются, как показано на этом рисунке. Это создает новый путь на 5 мм выше.

высший путь

СПРАВА НАЛЕВО

Когда путь идет справа налево (т.е. из точки B в точку A), делается то же самое, что показано на этом рисунке. Это создает новый путь на 5 мм ниже. нижний путь

В каждом случаепервыйвращение - этоположительныйивторой отрицательный. Эти повороты выполняются с помощью calcбиблиотеки. Для размещения текста я использую auto=leftопцию, которая позволяет мне всегда размещать текст на одной и той же стороне пути.

решение4

Этот ответ представляет собой небольшую вариацию решения Black Mild. Вместо использования матрицы Tikz узлов я строю массив с . Под каждой ячейкой массива строится узел PDF/Tikz, {NiceMatrix}и nicematrixя рисую стрелки, как это делает Black Mild.

\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}

$\begin{NiceMatrix}[hvlines,code-before = \columncolor{orange!30}{1}]
x   & 0.900 & 0.990 & 0.999 & 1.000 & 1.001 & 1.010 & 1.100 \\ 
f(x)& 1.810 & 1.980 & 1.998 & 2.000 & 2.002 & 2.020 & 2.210 
\CodeAfter
  \begin{tikzpicture}[-stealth,orange,shorten >=.5pt,
                      every node/.style={midway,scale=.8}]
  \def\d{.6}
  \draw ([shift={(90:\d)}]1-2.center)--([shift={(90:\d)}]1-5.center)    
  node[above]{$x$ approaches $1$};
  \draw ([shift={(90:\d)}]1-8.center)--([shift={(90:\d)}]1-5.center)    
  node[above]{$x$ approaches $1$};
  \draw ([shift={(-90:\d)}]2-2.center)--([shift={(-90:\d)}]2-5.center)   
  node[below]{$f(x)$ approaches $2$};
  \draw ([shift={(-90:\d)}]2-8.center)--([shift={(-90:\d)}]2-5.center)   
  node[below]{$f(x)$ approaches $2$};
  \end{tikzpicture}
\end{NiceMatrix}$

\end{document}

Вывод кода выше

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