PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenmodellierung Krähenfußnotation mit tikz



oxydon
04-07-2012, 13:06
Hallo zusammen.

Wir machen gerade an der Uni Datenmodellierung und verwenden dabei die Krähenfußnotation (Anzeigne von Kardinalitäten beim Zusammenspiel von Objekten - für das weitere ist das aber unwichtig). Das meiste funktioniert mit tikz ganz wunderbar: mehrere (zwei Pfeile), keines (kringel als Pfeilende), oder eins (ein Pfeil)


\draw [<<-]
\draw[o-]
\draw[-<]

Was nicht funktioniert ist 0 oder eins (ein Pfeil und ein Krignel dahinter), bzw. 0 oder mehrere (zwei Pfeile und ein Kringel dahinter)


\draw[< o-]
\draw[<< o-]
(Natürlich ohne leerzeichen zwischen den Pfeilspitzen und dem Kringel, aber sonst wird angnommen, dass es HTML Code ist ...)

Was muss ich umstellen / definieren, damit tikz auch diese Pfeilenden akzeptiert?

Schonmal danke!!

esdd
05-07-2012, 13:19
Hallo,

die Pfeilenden muss man sich selbst zusammen basteln. Für myo habe ich die Originaldefinition von o so angepasst, dass der Kringel weiß gefüllt wird. Im folgenden Code müssen ebenfalls noch die Leerzeichen zwischen den Pfeilspitzen und den Kringeln entfernt werden.



\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{arrows}

\makeatletter
\pgfarrowsdeclare{myo}{myo}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfutil@tempdimb=9\pgfutil@tempdima\advance\pgfut il@tempdimb by.5\pgflinewidth
\pgfarrowsrightextend{+\pgfutil@tempdimb}
}
{
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfsetdash{}{+0pt}
\pgfpathcircle{\pgfqpoint{4.5\pgfutil@tempdima}{0b p}}{4.5\pgfutil@tempdima}
\pgfsetfillcolor{white}
\pgfusepathqfillstroke
}
\makeatother
\pgfarrowsdeclarealias{<}{>}{to}{to}
\pgfarrowsdeclaredouble{<<}{>>}{<}{>}
% in den beiden folgenden Zeilen Leerzeichen in den { } entfernen!
\pgfarrowsdeclarecombine[\pgflinewidth]{< o}{o >}{myo}{myo}{<}{>}
\pgfarrowsdeclarecombine[\pgflinewidth]{<< o}{o >>}{myo}{myo}{<<}{>>}

\begin{document}
\begin{tikzpicture}
\draw[<<-o](0,1)--(1,1);
\draw[<< o-o >](0,0)--(1,0);% Leerzeichen in [ ] entfernen!
\end{tikzpicture}
\end{document}


Gruß
Elke