TikZ Crow's Foot notation on only one side for documentation
I'm documenting the different versions of database drawing styles.
this link shows how it looks like in a real diagram but my intention is to document only one side of the connection lines. Now the sample shows really perfectly how to draw and its done by chaining some PGF and TikZ code but I'm not able to rework it to a single line ending in Crow's Foot design line end. Like a 1:1 connection is this: -||---
it always also shows the other end as if its used within a diagram 1:1-1:1 like this -||------||-
.
Maybe somebody can show me how to change the PGF code to get a single Crow's Foot? Here is my MWE:
documentclass{article}%
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
defpk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right,]{(PK)};
\}
deffk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right]{(FK)};
\}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & n to n \[1em]
IEM & & & & \[1em]
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]
end{tabular}\[5em]
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
end{document}
After geting this part as one side i have a additional Question about this Crow's Foot drawing lines with PGF.
I need to add a line end that is not yet implemented. It is called 0 to 1 and lookes like this: -|O---
I tried to understand how the crow's Foot is drawn but i can't follow where it comes from. Can somebody show me the code where the three toe's of the crow's foot are drawn/coded?
Maybe then i can get a blend of "one" = -||---
and "omany" = /|O---
This is the end product of this discussion for anybody whanting to do the same in future:
documentclass{article} % say
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={ %this is the connection of lines and nodes
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
none to one/.style={
one-, zig zag to
},
none to oone/.style={
oone-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
none to many/.style={
crow's foot-, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
none to omany/.style={
omany-, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot} %this is many
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany} %this is omany
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one} %this is one
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & 0 to m \[1em]%zeile 1
IEM / crow's foot%
& % == 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 0 to 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to oone] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 1 to n
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % n to m
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}\[1em]%zeile 2
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]%zeile 3
end{tabular}\[2em]
end{document}
tikz-pgf database tikz-chains
add a comment |
I'm documenting the different versions of database drawing styles.
this link shows how it looks like in a real diagram but my intention is to document only one side of the connection lines. Now the sample shows really perfectly how to draw and its done by chaining some PGF and TikZ code but I'm not able to rework it to a single line ending in Crow's Foot design line end. Like a 1:1 connection is this: -||---
it always also shows the other end as if its used within a diagram 1:1-1:1 like this -||------||-
.
Maybe somebody can show me how to change the PGF code to get a single Crow's Foot? Here is my MWE:
documentclass{article}%
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
defpk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right,]{(PK)};
\}
deffk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right]{(FK)};
\}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & n to n \[1em]
IEM & & & & \[1em]
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]
end{tabular}\[5em]
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
end{document}
After geting this part as one side i have a additional Question about this Crow's Foot drawing lines with PGF.
I need to add a line end that is not yet implemented. It is called 0 to 1 and lookes like this: -|O---
I tried to understand how the crow's Foot is drawn but i can't follow where it comes from. Can somebody show me the code where the three toe's of the crow's foot are drawn/coded?
Maybe then i can get a blend of "one" = -||---
and "omany" = /|O---
This is the end product of this discussion for anybody whanting to do the same in future:
documentclass{article} % say
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={ %this is the connection of lines and nodes
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
none to one/.style={
one-, zig zag to
},
none to oone/.style={
oone-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
none to many/.style={
crow's foot-, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
none to omany/.style={
omany-, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot} %this is many
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany} %this is omany
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one} %this is one
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & 0 to m \[1em]%zeile 1
IEM / crow's foot%
& % == 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 0 to 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to oone] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 1 to n
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % n to m
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}\[1em]%zeile 2
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]%zeile 3
end{tabular}\[2em]
end{document}
tikz-pgf database tikz-chains
add a comment |
I'm documenting the different versions of database drawing styles.
this link shows how it looks like in a real diagram but my intention is to document only one side of the connection lines. Now the sample shows really perfectly how to draw and its done by chaining some PGF and TikZ code but I'm not able to rework it to a single line ending in Crow's Foot design line end. Like a 1:1 connection is this: -||---
it always also shows the other end as if its used within a diagram 1:1-1:1 like this -||------||-
.
Maybe somebody can show me how to change the PGF code to get a single Crow's Foot? Here is my MWE:
documentclass{article}%
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
defpk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right,]{(PK)};
\}
deffk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right]{(FK)};
\}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & n to n \[1em]
IEM & & & & \[1em]
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]
end{tabular}\[5em]
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
end{document}
After geting this part as one side i have a additional Question about this Crow's Foot drawing lines with PGF.
I need to add a line end that is not yet implemented. It is called 0 to 1 and lookes like this: -|O---
I tried to understand how the crow's Foot is drawn but i can't follow where it comes from. Can somebody show me the code where the three toe's of the crow's foot are drawn/coded?
Maybe then i can get a blend of "one" = -||---
and "omany" = /|O---
This is the end product of this discussion for anybody whanting to do the same in future:
documentclass{article} % say
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={ %this is the connection of lines and nodes
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
none to one/.style={
one-, zig zag to
},
none to oone/.style={
oone-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
none to many/.style={
crow's foot-, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
none to omany/.style={
omany-, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot} %this is many
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany} %this is omany
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one} %this is one
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & 0 to m \[1em]%zeile 1
IEM / crow's foot%
& % == 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 0 to 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to oone] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 1 to n
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % n to m
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}\[1em]%zeile 2
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]%zeile 3
end{tabular}\[2em]
end{document}
tikz-pgf database tikz-chains
I'm documenting the different versions of database drawing styles.
this link shows how it looks like in a real diagram but my intention is to document only one side of the connection lines. Now the sample shows really perfectly how to draw and its done by chaining some PGF and TikZ code but I'm not able to rework it to a single line ending in Crow's Foot design line end. Like a 1:1 connection is this: -||---
it always also shows the other end as if its used within a diagram 1:1-1:1 like this -||------||-
.
Maybe somebody can show me how to change the PGF code to get a single Crow's Foot? Here is my MWE:
documentclass{article}%
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
defpk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right,]{(PK)};
\}
deffk#1{node[name=entityname-#1, every property/.try]{#1};
node[name=entityname-#1, every property/.try, red, text width=1in, align=right]{(FK)};
\}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & n to n \[1em]
IEM & & & & \[1em]
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]
end{tabular}\[5em]
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[one to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
scalebox{0.4}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=2cm of a] (b) {};
draw[many to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}
end{document}
After geting this part as one side i have a additional Question about this Crow's Foot drawing lines with PGF.
I need to add a line end that is not yet implemented. It is called 0 to 1 and lookes like this: -|O---
I tried to understand how the crow's Foot is drawn but i can't follow where it comes from. Can somebody show me the code where the three toe's of the crow's foot are drawn/coded?
Maybe then i can get a blend of "one" = -||---
and "omany" = /|O---
This is the end product of this discussion for anybody whanting to do the same in future:
documentclass{article} % say
usepackage{tikz}
usetikzlibrary{%
chains,
}
tikzset{
dummy/.style={
rectangle,
rounded corners,
draw=white, very thick,
text centered},
zig zag to/.style={ %this is the connection of lines and nodes
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
none to one/.style={
one-, zig zag to
},
none to oone/.style={
oone-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
none to many/.style={
crow's foot-, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
none to omany/.style={
omany-, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot} %this is many
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany} %this is omany
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one} %this is one
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
defproperty#1{node[name=entityname-#1, every property/.try]{#1};}
defproperties{begingroupcatcode`_=11relaxprocessproperties}
defprocessproperties#1{endgroup%
defpropertycode{}%
foreach p in {#1}{%
expandafterexpandafterexpandaftergdefexpandafterexpandafterexpandafterpropertycode%
expandafterexpandafterexpandafter{expandafterpropertycodeexpandafterpropertyexpandafter{p}\}%
}%
propertycode%
}
begin{document}
section{Notation Versions}
begin{tabular}{lllll}
NOTATION & ==1 & 0 to 1 & 1 to n & 0 to m \[1em]%zeile 1
IEM / crow's foot%
& % == 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to one] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 0 to 1
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to oone] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % 1 to n
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to many] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
} & % n to m
scalebox{0.5}{
begin{tikzpicture}
node[dummy, inner sep=5pt] (a) {};
node[dummy, inner sep=5pt,right=1cm of a] (b) {};
draw[none to omany] (a.east) -- node[above]{} (b.west);
end{tikzpicture}
}\[1em]%zeile 2
CHEN & 1:1 & 0:1 & 1:n & 0:n \[1em]%zeile 3
end{tabular}\[2em]
end{document}
tikz-pgf database tikz-chains
tikz-pgf database tikz-chains
edited Sep 29 '17 at 13:56
novski
asked Sep 27 '17 at 18:11
novskinovski
53939
53939
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Look at the one to none
style in the following MWE.
Edit: to answer to the additional question, I've added omany to none
and oone to none
.
Edit n.2: added many to one
and restyled.
documentclass{article}
usepackage{booktabs}
usepackage{array}
renewcommand{arraystretch}{1.4}
usepackage{tikz}
tikzset{
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to none/.style={
one-, zig zag to
},
oone to none/.style={
oone-, zig zag to
},
omany to none/.style={
omany-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
many to none/.style={
crow's foot-, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
begin{document}
section{Notation Versions}
begin{tabular}{lcc}
toprule
Notation & IEM & CHEN \
midrule
one to none &
tikz{draw[one to none] (0,0) -- ++(1.5,0);} & 1:0\
one to one & tikz{draw[one to one] (0,0) -- ++(1.5,0);} & 1:1\
one to many & tikz{draw[one to many] (0,0) -- ++(1.5,0);} & 1:n\
many to none & tikz{draw[many to none] (0,0) -- ++(1.5,0);} & n:0\
one to (none or one or many) &tikz{draw[one to omany] (0,0) -- ++(1.5,0);} & \
many to one & tikz{draw[many to one] (0,0) -- ++(1.5,0);} & n:1\
many to many &tikz{draw[many to many] (0,0) -- ++(1.5,0);} & n:m\
(none or one or many) to none &tikz{draw[omany to none] (0,0) -- ++(1.5,0);} & \
(none or one) to none &tikz{draw[oone to none] (0,0) -- ++(1.5,0);} & \
bottomrule
end{tabular}
end{document}
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
I believe you forgot the "many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.
– Clément
Mar 18 at 17:59
|
show 1 more comment
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f393560%2ftikz-crows-foot-notation-on-only-one-side-for-documentation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Look at the one to none
style in the following MWE.
Edit: to answer to the additional question, I've added omany to none
and oone to none
.
Edit n.2: added many to one
and restyled.
documentclass{article}
usepackage{booktabs}
usepackage{array}
renewcommand{arraystretch}{1.4}
usepackage{tikz}
tikzset{
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to none/.style={
one-, zig zag to
},
oone to none/.style={
oone-, zig zag to
},
omany to none/.style={
omany-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
many to none/.style={
crow's foot-, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
begin{document}
section{Notation Versions}
begin{tabular}{lcc}
toprule
Notation & IEM & CHEN \
midrule
one to none &
tikz{draw[one to none] (0,0) -- ++(1.5,0);} & 1:0\
one to one & tikz{draw[one to one] (0,0) -- ++(1.5,0);} & 1:1\
one to many & tikz{draw[one to many] (0,0) -- ++(1.5,0);} & 1:n\
many to none & tikz{draw[many to none] (0,0) -- ++(1.5,0);} & n:0\
one to (none or one or many) &tikz{draw[one to omany] (0,0) -- ++(1.5,0);} & \
many to one & tikz{draw[many to one] (0,0) -- ++(1.5,0);} & n:1\
many to many &tikz{draw[many to many] (0,0) -- ++(1.5,0);} & n:m\
(none or one or many) to none &tikz{draw[omany to none] (0,0) -- ++(1.5,0);} & \
(none or one) to none &tikz{draw[oone to none] (0,0) -- ++(1.5,0);} & \
bottomrule
end{tabular}
end{document}
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
I believe you forgot the "many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.
– Clément
Mar 18 at 17:59
|
show 1 more comment
Look at the one to none
style in the following MWE.
Edit: to answer to the additional question, I've added omany to none
and oone to none
.
Edit n.2: added many to one
and restyled.
documentclass{article}
usepackage{booktabs}
usepackage{array}
renewcommand{arraystretch}{1.4}
usepackage{tikz}
tikzset{
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to none/.style={
one-, zig zag to
},
oone to none/.style={
oone-, zig zag to
},
omany to none/.style={
omany-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
many to none/.style={
crow's foot-, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
begin{document}
section{Notation Versions}
begin{tabular}{lcc}
toprule
Notation & IEM & CHEN \
midrule
one to none &
tikz{draw[one to none] (0,0) -- ++(1.5,0);} & 1:0\
one to one & tikz{draw[one to one] (0,0) -- ++(1.5,0);} & 1:1\
one to many & tikz{draw[one to many] (0,0) -- ++(1.5,0);} & 1:n\
many to none & tikz{draw[many to none] (0,0) -- ++(1.5,0);} & n:0\
one to (none or one or many) &tikz{draw[one to omany] (0,0) -- ++(1.5,0);} & \
many to one & tikz{draw[many to one] (0,0) -- ++(1.5,0);} & n:1\
many to many &tikz{draw[many to many] (0,0) -- ++(1.5,0);} & n:m\
(none or one or many) to none &tikz{draw[omany to none] (0,0) -- ++(1.5,0);} & \
(none or one) to none &tikz{draw[oone to none] (0,0) -- ++(1.5,0);} & \
bottomrule
end{tabular}
end{document}
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
I believe you forgot the "many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.
– Clément
Mar 18 at 17:59
|
show 1 more comment
Look at the one to none
style in the following MWE.
Edit: to answer to the additional question, I've added omany to none
and oone to none
.
Edit n.2: added many to one
and restyled.
documentclass{article}
usepackage{booktabs}
usepackage{array}
renewcommand{arraystretch}{1.4}
usepackage{tikz}
tikzset{
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to none/.style={
one-, zig zag to
},
oone to none/.style={
oone-, zig zag to
},
omany to none/.style={
omany-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
many to none/.style={
crow's foot-, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
begin{document}
section{Notation Versions}
begin{tabular}{lcc}
toprule
Notation & IEM & CHEN \
midrule
one to none &
tikz{draw[one to none] (0,0) -- ++(1.5,0);} & 1:0\
one to one & tikz{draw[one to one] (0,0) -- ++(1.5,0);} & 1:1\
one to many & tikz{draw[one to many] (0,0) -- ++(1.5,0);} & 1:n\
many to none & tikz{draw[many to none] (0,0) -- ++(1.5,0);} & n:0\
one to (none or one or many) &tikz{draw[one to omany] (0,0) -- ++(1.5,0);} & \
many to one & tikz{draw[many to one] (0,0) -- ++(1.5,0);} & n:1\
many to many &tikz{draw[many to many] (0,0) -- ++(1.5,0);} & n:m\
(none or one or many) to none &tikz{draw[omany to none] (0,0) -- ++(1.5,0);} & \
(none or one) to none &tikz{draw[oone to none] (0,0) -- ++(1.5,0);} & \
bottomrule
end{tabular}
end{document}
Look at the one to none
style in the following MWE.
Edit: to answer to the additional question, I've added omany to none
and oone to none
.
Edit n.2: added many to one
and restyled.
documentclass{article}
usepackage{booktabs}
usepackage{array}
renewcommand{arraystretch}{1.4}
usepackage{tikz}
tikzset{
zig zag to/.style={
to path={(tikztostart) -| ($(tikztostart)!#1!(tikztotarget)$) |- (tikztotarget) tikztonodes}
},
zig zag to/.default=0.5,
one to one/.style={
one-one, zig zag to
},
one to none/.style={
one-, zig zag to
},
oone to none/.style={
oone-, zig zag to
},
omany to none/.style={
omany-, zig zag to
},
one to many/.style={
one-crow's foot, zig zag to,
},
one to omany/.style={
one-omany, zig zag to
},
many to one/.style={
crow's foot-one, zig zag to
},
many to many/.style={
crow's foot-crow's foot, zig zag to
},
many to none/.style={
crow's foot-, zig zag to
},
}
makeatletter
pgfarrowsdeclare{crow's foot}{crow's foot}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
pgfarrowsdeclare{omany}{omany}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pt}{-9pgfutil@tempdima}}%
pgfpathlineto{pgfqpoint{-13pgfutil@tempdima}{0pt}}%
pgfpathlineto{pgfqpoint{0pt}{9pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{oone}{oone}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathcircle{pgfpoint{-11.5pt}{0}} {3.5pt}
pgfusepathqstroke%
}
pgfarrowsdeclare{one}{one}
{
pgfarrowsleftextend{+-.5pgflinewidth}%
pgfarrowsrightextend{+.5pgflinewidth}%
}
{
pgfutil@tempdima=0.6pt%
%advancepgfutil@tempdima by.25pgflinewidth%
pgfsetdash{}{+0pt}%
pgfsetmiterjoin%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-6pt}{6pt}}%
pgfpathmoveto{pgfqpoint{0pgfutil@tempdima}{0pgfutil@tempdima}}%
pgfpathmoveto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{-6pt}}%
pgfpathlineto{pgfqpoint{-8pt}{6pt}}%
pgfusepathqstroke%
}
begin{document}
section{Notation Versions}
begin{tabular}{lcc}
toprule
Notation & IEM & CHEN \
midrule
one to none &
tikz{draw[one to none] (0,0) -- ++(1.5,0);} & 1:0\
one to one & tikz{draw[one to one] (0,0) -- ++(1.5,0);} & 1:1\
one to many & tikz{draw[one to many] (0,0) -- ++(1.5,0);} & 1:n\
many to none & tikz{draw[many to none] (0,0) -- ++(1.5,0);} & n:0\
one to (none or one or many) &tikz{draw[one to omany] (0,0) -- ++(1.5,0);} & \
many to one & tikz{draw[many to one] (0,0) -- ++(1.5,0);} & n:1\
many to many &tikz{draw[many to many] (0,0) -- ++(1.5,0);} & n:m\
(none or one or many) to none &tikz{draw[omany to none] (0,0) -- ++(1.5,0);} & \
(none or one) to none &tikz{draw[oone to none] (0,0) -- ++(1.5,0);} & \
bottomrule
end{tabular}
end{document}
edited Mar 18 at 21:57
answered Sep 27 '17 at 19:50
CarLaTeXCarLaTeX
34.3k552141
34.3k552141
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
I believe you forgot the "many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.
– Clément
Mar 18 at 17:59
|
show 1 more comment
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
I believe you forgot the "many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.
– Clément
Mar 18 at 17:59
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
yes it is. where did you find "none" as keyword?
– novski
Sep 28 '17 at 4:15
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
@novski I invented it! You can change the name as you like!
– CarLaTeX
Sep 28 '17 at 5:19
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
Ok. Thnank you, i think i overlooked first that the second line beneth none has changed as well... i now added a additional question about how pgf drawing work in the main question. maybe you have a idea to that as well?
– novski
Sep 28 '17 at 15:49
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
@novski See my renewed answer and let me know if it's what you're looking for.
– CarLaTeX
Sep 28 '17 at 18:55
1
1
I believe you forgot the "
many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.– Clément
Mar 18 at 17:59
I believe you forgot the "
many to none/.style={ crow's foot-, zig zag to }
" case, if I read your code correctly.– Clément
Mar 18 at 17:59
|
show 1 more comment
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f393560%2ftikz-crows-foot-notation-on-only-one-side-for-documentation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown