Diagrama ER con cuadros vacíos como hoja de trabajo

Diagrama ER con cuadros vacíos como hoja de trabajo

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:

ingrese la descripción de la imagen aquí

Y así es como se ve en Word:

ingrese la descripción de la imagen aquí

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=0ptesos 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:

resultado

%\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.calloutsbiblioteca (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, consulte tealydashed
  • 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

resultado

%\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}

información relacionada