
Estou criando uma planilha para meus alunos. É sobre diagramas ER. É relativamente fácil com o Word, mas não parece tão bom ;)
Já sei criar diagramas ER. O que eu gostaria de ter são campos que os alunos tenham que preencher. Aqui meu 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}
Aqui está o resultado:
E aqui está o que parece no Word:
Então, como adicionar caixas vazias e balões de fala vazios ao diagrama ER? Estou muito grato pela sua ajuda!
Responder1
Aqui está a segunda versão, usando \TextField[options}{}
from package hyperref
.
Para mais configurações consulteCH. 9 em seu manual, por exemplo, para alterar as cores das bordas. (Você também pode definir inner sep=0pt
esses nós de texto explicativo.)
Agora seus alunos podem inserir respostas, salvar o pdf e enviar para você. Você pode lê-lo ou, de uma forma ou de outra, extrair suas respostas.
Mudanças:
\usepackage{hyperref}
- adicionou uma única linha e um TextField multilinha nestes dois nós:
...
% ~~~ 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]{}};
...
Em um visualizador, aqui FireFox, insira ou revise as respostas:
%\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}
Responder2
Aqui está uma maneira de fazer isso, uma vez tikz-er2.sty
baixado, por exemplo, no diretório de documentos, deGitHub.
Algumas observações:
- Reduzi o ruído do código de antemão ;-)
- use a
shapes.callouts
biblioteca (e procure no pgfmanual) - posicionar nós com texto vazio
{}
usando estilos relacionados a textos explicativos - Usei ponteiros absolutos, reutilizando seus nomes de nós (aqueles que encontrei) E mudei a chamada para um lado ou para outro
- a refatoração de estilos de nós pode e deve ser continuada, por exemplo, substituindo-a por alguns
\newcommand
- aqui eu apenas me restringi a um código um tanto legível, repetindo padrões de estilo semelhantes
- como de costume
Tikz
, os estilos podem ser substituídos localmente, vejateal
edashed
- para desenvolver desenhos prefiro aula
standalone
; (des)comente conforme necessário OU siga o caminho via packagegraphicx
,encontre exemplos por meio desta 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}