Ich möchte die folgende Tabelle auf Latex neu erstellen
Hier ist mein 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}
Antwort1
Sie können mit TikZ zeichnen.
\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(Juli 2020) Ich füge eine matrix
Version der Abbildung hinzu, die Zarkos Code etwas ähnelt.
\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}
Antwort2
Auch mit tikz
, jetzt aber mit Verwendung der matrix
Bibliothek. Für Pfeile werden Kantenbeschriftungen verwendet arrows.meta
und quoted
Bibliotheken:
\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}
Antwort3
Ich hab geschriebenzwei Makros( \valeur
und \fromto
dasautomatischPlatziere den Pfeilüberder Pfad und der Textüberder Pfeil oderuntenje nachdem, ob der Weg vonlinks nach rechtsoder nicht.
array
Sein Vorteil besteht darin, dass Sie Pfeile zu jedem Array hinzufügen können , das mit einem spezialisierten Paket wie tabular
oder einem anderen Paket zum Schreiben von Arrays geschrieben wurde. Dadurch müssen Sie den Code einer bereits erstellten Tabelle nicht neu schreiben.
Zum Beispiel:
Der Pfeil steht immer auf derlinke Seitein Richtung des gebauten Pfades. Das heißt: oben, wenn der Pfad vonlinks nach rechtsund andernfalls darunter. Der Text wird automatisch über oder unter dem Pfeil positioniert.
\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}
Code und Ergebnis (muss zweimal kompiliert werden):
\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}
Das erste Makro heißt valeur
:
markiert den Anfang und das Ende des Pfeils mit einem TikZ node
und zeigt den in der Tabellenzelle enthaltenen Wert an.
\newcommand{\valeur}[2]{
\tikz[remember picture] \node[inner sep=0pt,anchor=center](#1){#2};}
Es gibt zwei Argumente:
- Das erste
#1
ist dasNameWir geben demnode
- das zweite
#2
ist dasWertvon diesemnode
.
Das zweite Makro heißt \fromto
:
Dieses Makro positioniert den Pfeil immer auf der linken Seite in Richtung des Pfades. Oben, wenn der Pfad vonlinks nach rechtsund andernfalls weiter unten. Dieses Makro hat 4 Argumente:
- Die erste
#1
ist optional und ermöglicht die Übermittlung von TikZ-Optionen an den Pfad<Optionen> - der zweite
#2
ist der Ausgangspunkt< von> - der dritte
#3
ist der Ankunftspunkt< bis> - der vierte
#4
ist der zu positionierende Text< text>
\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};}
Wie funktioniert es?
Das Prinzip ist folgendes: Wenn der Wegvon links nach rechts, der Pfeil und der Text werden platziertüberder Weg,ansonstenes wird platziertunten. Das ist fertigohnekeine Positionierungstests, sondern mit demEigenschaften der Rotationen Dadurch wird die Verwendung von zwei Optionen vermieden, die de facto nutzlos sind:
- eine für die Platzierung der Pfeile (nach oben oder unten)
- sowie eine Option für die Platzierung des Textes relativ zu diesen Pfeilen (über oder unter).
Rotationen
In der Geometrie ist ein positiver Winkel eine Drehung gegen den Uhrzeigersinn. Ein negativer Winkel ist eine Drehung im Uhrzeigersinn.
Von links nach rechts
Wenn der Pfad von links nach rechts verläuft (also von Punkt A nach Punkt B), werden die 5 mm voneinander entfernten Punkte wie in dieser Abbildung gezeigt gedreht. Dadurch wird ein neuer Pfad erstellt, der 5 mm höher liegt.
Von rechts nach links
Wenn der Pfad von rechts nach links verläuft (also von Punkt B nach Punkt A), wird dasselbe wie in dieser Abbildung gezeigt gemacht. Dadurch wird ein neuer Pfad 5 mm tiefer erstellt.
In jedem FallErsteRotation istpositivund daszweites Negativ. Diese Drehungen werden mit der
calc
Bibliothek durchgeführt. Um den Text zu platzieren, verwende ich dieauto=left
Option, die es mir ermöglicht, den Text immer auf der gleichen Seite eines Pfades zu platzieren.
Antwort4
Diese Antwort ist eine leichte Variation der Lösung von Black Mild. Anstatt eine Tikz-Matrix von Knoten zu verwenden, konstruiere ich das Array mit {NiceMatrix}
. nicematrix
Unter jeder Zelle des Arrays wird ein PDF/Tikz-Knoten konstruiert und ich zeichne die Pfeile wie 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}