
生徒用のワークシートを作成中です。ER 図に関するものです。Word を使えば比較的簡単ですが、見た目はあまり良くありません ;)
ER 図の作成方法は既に知っています。私が欲しいのは、学生が記入しなければならないフィールドです。これが私のコードです:
\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}
結果は次のとおりです。
Word で表示すると次のようになります。
では、ER 図に空のボックスと空の吹き出しを追加するにはどうすればよいでしょうか? ご協力いただければ幸いです。
答え1
\TextField[options}{}
以下は、パッケージ を使用した 2 番目のバージョンですhyperref
。
詳細な設定については、マニュアルの第9章たとえば、境界線の色を変更するなどです。(inner sep=0pt
これらのコールアウト ノードに対しても設定する必要があります。)
これで、生徒は回答を入力し、PDF を保存してあなたに送信できます。あなたはそれを読むか、何らかの方法で生徒の回答を抽出することができます。
変更点:
\usepackage{hyperref}
- 次の 2 つのノードに単一行と複数行の TextField を追加しました。
...
% ~~~ 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]{}};
...
ビューア(ここでは FireFox)で、回答を入力または確認します。
%\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}
答え2
これを行う方法は、例えばtikz-er2.sty
ドキュメントディレクトリにダウンロードしたら、ギットハブ。
いくつかのコメント:
- 事前にコードノイズを減らしました ;-)
- ライブラリを使用する
shapes.callouts
(pgfmanualで調べる) {}
吹き出し関連のスタイルを使用して空のテキストを持つノードを配置する- 私は絶対ポインタを使用し、あなたのノード名(私が見つけたもの)を再利用し、コールアウトをどちらか一方にシフトしました
- ノードスタイルのリファクタリングは継続される可能性があり、また継続されるべきである。例えば、いくつかの
\newcommand
- ここでは、似たようなスタイルのパターンを繰り返しながら、ある程度読みやすいコードに限定しました。
- 通常の と同様に
Tikz
、スタイルはローカルで上書きできます。およびを参照してくださいteal
。dashed
- 図面を作成する場合、クラスを好みます
standalone
。必要に応じてコメントアウトするか、パッケージ経由のパスに従いますgraphicx
。このクエリで例を見つける
%\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}