aboutsummaryrefslogtreecommitdiffstats
path: root/doc/user/dia_intr
diff options
context:
space:
mode:
Diffstat (limited to 'doc/user/dia_intr')
-rw-r--r--doc/user/dia_intr108
1 files changed, 108 insertions, 0 deletions
diff --git a/doc/user/dia_intr b/doc/user/dia_intr
new file mode 100644
index 0000000..52a9d49
--- /dev/null
+++ b/doc/user/dia_intr
@@ -0,0 +1,108 @@
+@Section
+ @Tag { dia_intr }
+ @Title { Introduction }
+@Begin
+@PP
+To use the @@Diag symbol you first need to include its setup file. For
+example, suppose you have an ordinary document with tables:
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+Change this to
+@ID @OneRow @Code {
+"@SysInclude { tbl }"
+"@SysInclude { diag }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+This provides everything you need for making diagrams.
+@PP
+The result of the @@Diag symbol is an object in the usual way. A diagram
+is commonly made into a centred display, like this:
+@ID @OneRow @Code {
+"@CentredDisplay @Diag {"
+" ..."
+"}"
+}
+or into a floating figure, like this:
+@ID @OneRow @Code {
+"@Figure"
+" @Caption { ... }"
+"@Diag {"
+" ..."
+"}"
+}
+but it could be an entry in a table, a word in a paragraph, or anything
+else.
+@PP
+Most uses of @@Diag contain a @I { nodes part } and a @I { links part }:
+@ID @OneRow lines @Break {
+@Code "@Diag {"
+ @I { nodes part }
+ @Code "//"
+ @I { links part }
+@Code "}"
+}
+This reflects @@Diag's view of the world as consisting of {@I nodes}
+(circles, squares, and so on), which have to be put in their right
+places and then joined with @I links (lines, arrows). The technical
+meaning of the {@Code "//"} symbol does not concern us here; it
+simply serves to divide the two parts.
+@PP
+For example, here is a nodes part containing two nodes separated by
+a @Code "@DP" symbol that (as usual) leaves some vertical space
+between them:
+@ID @OneRow @Tab
+ @Fmta { @Col 7c @Wide A ! @Col B }
+{
+@Rowa
+ A { @Code {
+"@Ellipse { Hello, world }"
+"@DP"
+"@Square @I x"
+} }
+ B { @Diag {
+@Ellipse { Hello, world }
+@DP
+@Square @I x
+} }
+}
+Node symbols like @Code "@Ellipse" and @Code "@Square" follow a familiar
+pattern: they consume the following object, which may be arbitrary, draw
+a shape around it, and give back the resulting object. To insert links, the
+nodes must first be given names, called {@I tags}, using the @Code "::" symbol:
+@ID @OneRow @Code {
+"A:: @Ellipse { Hello, world }"
+"@DP"
+"B:: @Square @I x"
+}
+Then a link from @Code A to @Code B may be added to the links part:
+@ID @OneRow @Tab
+ @Fmta { @Col 7c @Wide A ! @Col B }
+{
+@Rowa
+ A { @Code {
+"@Diag {"
+" A:: @Ellipse { Hello, world }"
+" @DP"
+" B:: @Square @I x"
+" //"
+" @Link from { A } to { B }"
+"}"
+} }
+ B { @Diag {
+A:: @Ellipse { Hello, world }
+@DP
+B:: @Square @I x
+//
+@Link from { A } to { B }
+} }
+}
+Subsequent examples will often omit the enclosing {@Code "@Diag { }"}.
+@End @Section