Quero recriar a seguinte tabela em látex
Aqui está meu 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}
Responder1
Você pode desenhar com 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}
PS(Julho de 2020) Adiciono uma matrix
versão da figura, um pouco semelhante ao código de Zarko.
\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}
Responder2
Também com tikz
, mas agora com uso da matrix
biblioteca. Para setas, são empregados rótulos de borda arrows.meta
e quoted
bibliotecas:
\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}
Responder3
escreviduas macros( \valeur
e \fromto
essaautomaticamentecoloque a setaacimao caminho e o textoacimaa seta ouabaixodependendo se o caminho vai deda esquerda para direitaou não.
Sua vantagem é que permite adicionar setas a qualquer array escrito com um pacote especializado como array
, tabular
ou qualquer outro pacote projetado para escrever arrays. Isso evita ter que reescrever o código de uma tabela já criada.
Por exemplo:
A seta está sempre posicionada nolado esquerdona direção do caminho construído. Quer dizer: acima quando o caminho vai deda esquerda para direitae abaixo caso contrário. O texto é posicionado automaticamente acima ou abaixo da seta.
\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}
Código e resultado (a ser compilado duas vezes):
\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}
A primeira macro chamada valeur
:
marca o início e o fim da seta com um TikZ node
e exibe o valor contido na célula da tabela.
\newcommand{\valeur}[2]{
\tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}
Tem dois argumentos:
- o primeiro
#1
é onomedamos aonode
- o segundo
#2
é ovalordistonode
.
A segunda macro chamada \fromto
:
Esta macro sempre posiciona a seta do lado esquerdo na direção do caminho. Acima quando o caminho vai deda esquerda para direitae abaixo caso contrário. Esta macro possui 4 argumentos:
- o primeiro
#1
é opcional e permite transmitir opções do TikZ para o caminho<opções> - o segundo
#2
é o ponto de partida<de> - o terceiro
#3
é o ponto de chegada<para> - o quarto
#4
é o texto a ser posicionado<texto>
\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};}
Como funciona?
O princípio é o seguinte: se o caminho forda esquerda para a direita, a seta e o texto são colocadosacimao caminho,de outra formaele é colocadoabaixo. Isso está feitosemquaisquer testes de posicionamento, mas usando opropriedades das rotações Isso evita o uso de 2 opções que são de fato inúteis:
- um para a colocação das setas (para cima ou para baixo)
- bem como uma opção de posicionamento do texto em relação a essas setas (acima ou abaixo).
Rotações
Na geometria, um ângulo positivo é uma rotação no sentido anti-horário. Um ângulo negativo é uma rotação no sentido horário.
Da esquerda para a direita
Quando o caminho vai da esquerda para a direita (ou seja, do ponto A ao ponto B), os pontos localizados a 5 mm um do outro são girados conforme mostrado nesta figura. Isso cria um novo caminho 5 mm mais alto.
Da direita para esquerda
Quando o caminho vai da direita para a esquerda (ou seja, do ponto B ao ponto A), o mesmo é feito conforme mostrado nesta figura. Isso cria um novo caminho 5 mm mais baixo.
Em cada caso, oprimeirorotação épositivoe asegundo negativo. Essas rotações são realizadas com a
calc
biblioteca. Para colocar o texto, utilizo aauto=left
opção que me permite colocar sempre o texto no mesmo lado de um caminho.
Responder4
Esta resposta é uma ligeira variação da solução da Black Mild. Em vez de usar uma matriz de nós Tikz, construo a matriz com {NiceMatrix}
of nicematrix
. Um nó PDF/Tikz é construído sob cada célula do array e eu desenho as setas como Black Mild faz.
\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}