Quiero recrear la siguiente tabla en látex.
Aqui esta mi 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}
Respuesta1
Puedes dibujar con 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}
PD(Julio 2020) Agrego una matrix
versión de la figura, algo similar al 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}
Respuesta2
También con tikz
, pero ahora con uso de la matrix
biblioteca. Para las flechas, se emplean etiquetas de borde arrows.meta
y 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}
Respuesta3
escribídos macros( \valeur
y \fromto
esoautomáticamentecoloca la flechaarribael camino y el textoarribala flecha oabajodependiendo de si el camino va desdede izquierda a derechaO no.
Su ventaja es que le permite agregar flechas a cualquier matriz escrita con un paquete especializado como array
, tabular
o cualquier otro paquete diseñado para escribir matrices. Esto evita tener que reescribir el código de una tabla ya creada.
Por ejemplo:
La flecha siempre está situada en ellado izquierdoen dirección al camino construido. Es decir: arriba cuando el camino va dede izquierda a derechay debajo en caso contrario. El texto se coloca automáticamente encima o debajo de la flecha.
\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 y resultado (para compilar dos veces):
\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}
La primera macro llamada valeur
:
marca el principio y el final de la flecha con un TikZ node
y muestra el valor contenido en la celda de la tabla.
\newcommand{\valeur}[2]{
\tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}
Tiene dos argumentos:
- el primero
#1
es elnombrele damos alnode
- el segundo
#2
es elvalorde estanode
.
La segunda macro llamada \fromto
:
Esta macro siempre posiciona la flecha en el lado izquierdo en la dirección del camino. Arriba cuando el camino va desdede izquierda a derechay debajo en caso contrario. Esta macro tiene 4 argumentos:
- el primero
#1
es opcional y permite transmitir opciones de TikZ al camino<opciones> - el segundo
#2
es el punto de partida<de> - el tercero
#3
es el punto de llegada<a> - el cuarto
#4
es el texto a posicionar<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?
El principio es el siguiente: si el camino vade izquierda a derecha, se colocan la flecha y el textoarribael camino,de lo contrarioesta colocadoabajo. Esto esta hechosincualquier prueba de posicionamiento, pero usando elpropiedades de las rotaciones Esto evita el uso de 2 opciones que de facto son inútiles:
- uno para la colocación de las flechas (arriba o abajo)
- así como una opción para la ubicación del texto en relación con estas flechas (arriba o abajo).
Rotaciones
En geometría, un ángulo positivo es una rotación en sentido antihorario. Un ángulo negativo es una rotación en el sentido de las agujas del reloj.
De izquierda a derecha
Cuando el camino va de izquierda a derecha (es decir, del punto A al punto B), los puntos ubicados a 5 mm entre sí se rotan como se muestra en esta figura. Esto crea un nuevo camino 5 mm más alto.
De derecha a izquierda
Cuando el camino va de derecha a izquierda (es decir, del punto B al punto A), se hace lo mismo como se muestra en esta figura. Esto crea un nuevo camino 5 mm más bajo.
En cada caso, elprimerola rotación espositivoy elsegundo negativo. Estas rotaciones se realizan con la
calc
biblioteca. Para colocar el texto, uso laauto=left
opción que me permite colocar siempre el texto en el mismo lado de un camino.
Respuesta4
Esta respuesta es una ligera variación de la solución de Black Mild. En lugar de usar una matriz de nodos Tikz, construyo la matriz con {NiceMatrix}
of nicematrix
. Se construye un nodo PDF/Tikz debajo de cada celda de la matriz y dibujo las flechas como lo hace 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}