
Estoy en el proceso de crear una hoja de trabajo para mis alumnos. Se trata de diagramas ER. Es relativamente fácil con Word, pero no se ve tan bien;)
Ya sé cómo crear diagramas ER. Lo que me gustaría tener son campos que los estudiantes deben completar. Aquí mi código:
\documentclass[10pt,letterpaper]{article}
\usepackage[lmargin=1in,rmargin=1in,tmargin=1in,bmargin=1in]{geometry}
\usepackage{tikz-er2}
\usepackage{adjustbox}
\usetikzlibrary{shadows,positioning}
\begin{document}
\tikzset{every entity/.style={top color=white,bottom color=blue!30,draw=blue!50!black!100,drop shadow},
every attribute/.style = {top color=white, bottom color=yellow!20,
draw=yellow, drop shadow},
every relationship/.style ={top color=white, bottom color=red!20,
draw=red!50!black!100, drop shadow},
every edge/.style = {link},
every isa/.style = {top color=white, bottom color=green!20,
draw=green!50!black!100, drop shadow},
}
\begin{adjustbox}{width=\columnwidth,center}
\begin{tikzpicture}[node distance=8em]
\node[entity] (student) {Kunde};
\node[attribute] (stud-id) [left = of student] {\key{KNR}} edge (student);
\node[attribute] (name) [above = of student] {Name} edge (student);
\node[relationship] (joins) [right = of student] {kauft} edge (student);
\node[entity] (pgroup) [right = of joins] {Artikel} edge (joins);
\node[attribute] (group-id) [above = of pgroup] {Bezeichnung} edge (pgroup);
\node[attribute] (group-id) [right = of pgroup] {\key{ANR}} edge (pgroup);
\end{tikzpicture}
\end{adjustbox}
\end{document}
Aquí está el resultado:
Y así es como se ve en Word:
Entonces, ¿cómo agregar cuadros vacíos y bocadillos vacíos al diagrama ER? ¡Estoy muy agradecido por tu ayuda!
Respuesta1
Aquí está la segunda versión, usando \TextField[options}{}
from package hyperref
.
Para más configuraciones verCap. 9 en su manual, por ejemplo, para cambiar los colores del borde. (Es posible que también desee configurar inner sep=0pt
esos nodos de llamada).
Ahora sus alumnos pueden ingresar respuestas, guardar el pdf y enviárselo. Puedes leerlo o, de una forma u otra, extraer sus respuestas.
Cambios:
\usepackage{hyperref}
- Agregué una sola línea y un TextField de varias líneas en estos dos nodos:
...
% ~~~ callouts ~~~~~~~~~~~~~~~~~~~
\node[ca,callout absolute pointer={(stud-id.330)}]
at ([shift=(-50:15mm)]stud-id) {\TextField[name=q1]{}};
\node[ca,callout absolute pointer={(name.west)},anchor=east,fill=teal!20]
at ([shift=(180:15mm)]name) {\TextField[name=q2, width=22mm, height=10mm, multiline=true]{}};
...
En un visor, aquí Firefox, ingresa o revisa las respuestas:
%\documentclass[10pt,letterpaper]{article}
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage[lmargin=1in,rmargin=1in,tmargin=1in,bmargin=1in]{geometry}
\usepackage{tikz-er2} % https://github.com/harrisony/tikz-er2/blob/usyd/tikz-er2.sty
%\usepackage{adjustbox}
\usetikzlibrary{shadows,positioning}
\usetikzlibrary{shapes.callouts}
\usepackage{hyperref}
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\tikzset{
every entity/.style = { top color=white,bottom color=blue!30,
draw=blue!50!black!100,drop shadow},
every attribute/.style = { top color=white, bottom color=yellow!20,
draw=yellow, drop shadow},
every relationship/.style = { top color=white, bottom color=red!20,
draw=red!50!black!100, drop shadow},
every edge/.style = {link},
every isa/.style = { top color=white, bottom color=green!20,
draw=green!50!black!100, drop shadow},
}
%\begin{adjustbox}{width=\columnwidth,center}
\begin{tikzpicture}[
node distance=8em,
ca/.style={draw,rectangle callout,minimum width=3cm,minimum height=10mm},
]
% ~~~ ER-diagram ~~~~~~~~~~~~~~~~~~~~~~~~~~
\node[entity] (student) {Kunde};
\node[attribute] (stud-id) [left = of student]{\key{KNR}} edge (student);
\node[attribute] (name) [above = of student]{Name} edge (student);
\node[relationship] (joins) [right = of student]{kauft} edge (student);
\node[entity] (pgroup) [right = of joins] {Artikel} edge (joins);
\node[attribute] (group-id) [above = of pgroup] {Bezeichnung} edge (pgroup);
\node[attribute] (group-id) [right = of pgroup] {\key{ANR}} edge (pgroup);
% ~~~ callouts ~~~~~~~~~~~~~~~~~~~
\node[ca,callout absolute pointer={(stud-id.330)}]
at ([shift=(-50:15mm)]stud-id) {\TextField[name=q1]{}};
\node[ca,callout absolute pointer={(name.west)},anchor=east,fill=teal!20]
at ([shift=(180:15mm)]name) {\TextField[name=q2, width=22mm, height=10mm, multiline=true]{}};
\node[ca,callout absolute pointer={(joins.south)},anchor=north,dashed,draw=purple]
at ([yshift=-20mm, xshift=5mm)]joins) {};
\end{tikzpicture}
%\end{adjustbox}
\end{document}
Respuesta2
Aquí tienes una manera de hacerlo, una vez.tikz-er2.sty
descargado, por ejemplo, en el directorio de documentos, desdegithub.
Algunas observaciones:
- Reduje el ruido del código de antemano ;-)
- use la
shapes.callouts
biblioteca (y búsquela en el pgfmanual) - posicionar nodos con texto vacío
{}
usando estilos relacionados con llamadas - Utilicé punteros absolutos, reutilicé los nombres de sus nodos (los que encontré) Y cambié la leyenda de una forma u otra
- La refactorización de estilos de nodos podría y debería continuarse, por ejemplo, reemplazándola por algunos.
\newcommand
- aquí simplemente me limité a un código algo legible, repitiendo patrones de estilo similares
- Como es habitual con
Tikz
, los estilos se pueden sobrescribir localmente, consulteteal
ydashed
- para desarrollar dibujos prefiero la clase
standalone
; (des)comentar según sea necesario O seguir la ruta a través del paquetegraphicx
,encontrar ejemplos a través de esta consulta
%\documentclass[10pt,letterpaper]{article}
\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage[lmargin=1in,rmargin=1in,tmargin=1in,bmargin=1in]{geometry}
\usepackage{tikz-er2} % https://github.com/harrisony/tikz-er2/blob/usyd/tikz-er2.sty
%\usepackage{adjustbox}
\usetikzlibrary{shadows,positioning}
\usetikzlibrary{shapes.callouts}
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\tikzset{
every entity/.style = { top color=white,bottom color=blue!30,
draw=blue!50!black!100,drop shadow},
every attribute/.style = { top color=white, bottom color=yellow!20,
draw=yellow, drop shadow},
every relationship/.style = { top color=white, bottom color=red!20,
draw=red!50!black!100, drop shadow},
every edge/.style = {link},
every isa/.style = { top color=white, bottom color=green!20,
draw=green!50!black!100, drop shadow},
}
%\begin{adjustbox}{width=\columnwidth,center}
\begin{tikzpicture}[
node distance=8em,
ca/.style={draw,rectangle callout,minimum width=3cm,minimum height=10mm},
]
% ~~~ ER-diagram ~~~~~~~~~~~~~~~~~~~~~~~~~~
\node[entity] (student) {Kunde};
\node[attribute] (stud-id) [left = of student]{\key{KNR}} edge (student);
\node[attribute] (name) [above = of student]{Name} edge (student);
\node[relationship] (joins) [right = of student]{kauft} edge (student);
\node[entity] (pgroup) [right = of joins] {Artikel} edge (joins);
\node[attribute] (group-id) [above = of pgroup] {Bezeichnung} edge (pgroup);
\node[attribute] (group-id) [right = of pgroup] {\key{ANR}} edge (pgroup);
% ~~~ callouts ~~~~~~~~~~~~~~~~~~~
\node[ca,callout absolute pointer={(stud-id.330)}]
at ([shift=(-50:15mm)]stud-id) {};
\node[ca,callout absolute pointer={(name.west)},anchor=east,fill=teal!20]
at ([shift=(180:15mm)]name) {};
\node[ca,callout absolute pointer={(joins.south)},anchor=north,dashed,draw=purple]
at ([yshift=-20mm, xshift=5mm)]joins) {};
\end{tikzpicture}
%\end{adjustbox}
\end{document}