3

I'm trying to produce an EXPRESS-G diagram (Wikipedia or ISO 10303-11, Annex B).

I'm having difficulties producing the correct arrowhead for the inheritance relationship - it gets thicker together with the line itself, which is not wanted.

MWE: The circle at B should be of same size as the circle at C, with the line thickness staying unchanged.

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,arrows.meta,positioning}
\begin{document}
  \begin{tikzpicture}[every node/.style={draw}]
    \node (a) {A};
    \node[left=of a] (b) {B};
    \node[right=of a] (c) {C};
    \draw[-o] (a) -- (c);
    \draw[-o,ultra thick] (a) -- (b); % how to only change line width, but not the arrowhead thickness?
  \end{tikzpicture}
\end{document}

Produced result

I've tried line width as an alternative to ultra thick, but to no avail.

Note: I know, that a tikzlibrary doing all this would be great, but I have not yet dived into the tikz library programming. Perhaps at some other time.

4
  • As a workaround you may try to place the arrowhead with no line to B-box and draw the thick line without arrowhead. Nov 1, 2020 at 10:52
  • I can't seem to make it work. I split the definition, first drawing the thick line, then a line with a circle at the end. If I specify open circle, the thick line can still be seen; if I specify the circle white the line is covered, but the circle is gone as well. How to only change the fill color of the arrowhead but not its line color? Nov 1, 2020 at 11:04
  • 1
    Ok, seems to be tricky. Then, drawing a circle as a node and putting all together seems possible, even if inconvenient. Nov 1, 2020 at 11:08
  • Yeah, I agree with that workaround - putting another circlar node at node.east or similar. But I assume there could already exist a better way :) Nov 1, 2020 at 11:12

2 Answers 2

5

With arrows.meta you can actually add drawing instructions to the arrow tip, so you could define a new arrow tip with

circ/.tip={Circle[/tikz/thin, open, width=5pt, length=5pt]}

and use -circ.

enter image description here

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{arrows,arrows.meta,positioning}
\begin{document}
  \begin{tikzpicture}[
      every node/.style={draw},
      circ/.tip={Circle[/tikz/thin, open, width=5pt, length=5pt]} % the default line width is actually thin
      ]
    \node (a) {A};
    \node[left=of a] (b) {B};
    \node[right=of a] (c) {C};
    \draw[-circ] (a) -- (c);
    \draw[-circ,ultra thick] (a) -- (b); % how to only change line width, but not the arrowhead thickness?
  \end{tikzpicture}
\end{document}
1
  • Awesome, thanks! It works. Nov 1, 2020 at 11:26
2

I was the developer of EXPRESS-G and wrote the expressg package for easy creation of EXPRESS-G, and other BLA (BoX Line Annotation) diagrams.

Unfortunatly, for some reason doing texdoc expressg returns expeg.pdf which shows samples of the package's output. For some reason the package is not in my computer's copy of TexLive but is available from https://ctan.org/pkg/expressg

2
  • It is a pleasure to get to know somebody that already did most of the heavy lifting! Care to join forces and provide a tikzlibrary for BLA / EXPRESS-G diagrams at some point? I hope you don't mind that I don't change the correct answer, as it really solves the problem at hand, while your solves it on a more generic level. Nov 2, 2020 at 14:59
  • @PjancMatuzl Thank you for the invitation but I am slowing down and my memory is not what it was. I have never used tikz and probably never will. If you want to use expressg-type ideas in tikz you are very welcome. --- GOM Nov 2, 2020 at 19:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .