diff --git a/editions/tw5.com/tiddlers/macros/syntax/Procedure Call Syntax.tid b/editions/tw5.com/tiddlers/macros/syntax/Procedure Call Syntax.tid
new file mode 100644
index 000000000..c7ab07644
--- /dev/null
+++ b/editions/tw5.com/tiddlers/macros/syntax/Procedure Call Syntax.tid
@@ -0,0 +1,33 @@
+created: 20240310165023000
+modified: 20240310172648116
+tags: [[Procedure Syntax]]
+title: Procedure Call Syntax
+type: text/vnd.tiddlywiki
+
+<<.preamble """What follows is a formal presentation of the syntax of the WikiText syntax for procedure calls, using [[railroad diagrams|Railroad Diagrams]].""">>
+
+!! procedure-name
+
+<$railroad text="""
+"<<" [[ procedure-name |Procedures]] [: [[whitespace|"Filter Whitespace"]] [:{param-value}] ]">>"
+"""/>
+
+* The [[procedure's|Procedures]] <<.place procedure-name>> is a sequence of non-whitespace characters other than `(` or `>`.
+
+* <<.place whitespace>> denotes a sequence of [[whitespace characters|Filter Whitespace]].
+
+!!! param-value
+
+Each ''individual'' <<.place param-value>> has the following syntax:
+
+<$railroad text="""
+\start none
+\end none
+[: param-name [:[[whitespace|"Filter Whitespace"]]] ":" [:[[whitespace|"Filter Whitespace"]]] ] value [: [[whitespace|"Filter Whitespace"]] ]
+"""/>
+
+* The <<.place param-name>> is a sequence of letters (`A`--`Z`, `a`--`z`), digits (`0`--`9`), hyphens (`-`) and underscores (`_`).
+
+* The <<.place value>> is specified as follows:
+
+<$railroad text={{$:/editions/tw5.com/railroad/macro-parameter-value}}/>
diff --git a/editions/tw5.com/tiddlers/macros/syntax/Procedure Definition Syntax.tid b/editions/tw5.com/tiddlers/macros/syntax/Procedure Definition Syntax.tid
new file mode 100644
index 000000000..7a621ee59
--- /dev/null
+++ b/editions/tw5.com/tiddlers/macros/syntax/Procedure Definition Syntax.tid
@@ -0,0 +1,93 @@
+created: 20240310165023000
+modified: 20240310175033730
+tags: [[Procedure Syntax]]
+title: Procedure Definition Syntax
+type: text/vnd.tiddlywiki
+
+<<.preamble """What follows is a formal presentation of the syntax of the [[Pragma: \procedure]], using [[railroad diagrams|Railroad Diagrams]]. """>>
+
+! \procedure
+
+There are 2 types of procedure definitions
+
+* Single line definitions
+* Multi line definitions
+
+!! Single Line
+
+Single line definitions should only be used for very short bodies, where the procedure name, params and the body fit into 1 line terminated with a line-feed.
+
+<$railroad text="""
+"\procedure"
+[[<"space">|"Filter Whitespace"]]
+"procedure-name"
+<"(params)">
+[:[[<"space">|"Filter Whitespace"]]]
+"body"
+"lf"
+"""/>
+
+!! Multi Line
+
+The majority of procedure definitions will have a body, that spans over several lines of wikitext. Those procedure definitions are terminated using the "\end" pragma
+
+<$railroad text="""
+"\procedure"
+[[<"space">|"Filter Whitespace"]]
+"procedure-name"
+<"(params)">
+[:[[<"space">|"Filter Whitespace"]]]
+body
+"\end"
+"""/>
+
+The [[procedure-name|Procedures]] is a sequence of non-whitespace characters other than `(` or `>`.
+
+
+* <<.place procedure-name>> is a sequence of letters (`A`--`Z`, `a`--`z`), digits (`0`--`9`), hyphens (`-`) and underscores (`_`)
+* <<.place body>> is wikitext including [[nested procedures|Pragma: \procedure]]
+* <<.place space>> denotes a sequence of [[whitespace characters|Filter Whitespace]]
+
+!! params
+
+The parameter declaration list <<.place (params)>> has the following syntax:
+
+<$railroad text="""
+\start none
+\end none
+"(" [:"sep"] [:{ parameter "sep" }] ")"
+"""/>
+
+* <<.place sep>> is any sequence of characters that does not match a <<.place param-name>>.
Among other things, this includes commas, spaces and linefeeds.
+
+
+Each ''individual'' <<.place parameter>> has the following syntax:
+
+<$railroad text="""
+\start none
+\end none
+"param-name" [: [:[[<"space">|"Filter Whitespace"]]] ":" [:[[<"space">|"Filter Whitespace"]]] default ]
+"""/>
+
+* <<.place param-name>> is a sequence of letters (`A`--`Z`, `a`--`z`), digits (`0`--`9`), hyphens (`-`) and underscores (`_`).
+
+* <<.place default>> is an optional value of a parameter is specified as follows:
+
+<$railroad text={{$:/editions/tw5.com/railroad/macro-parameter-value}}/>
+
+!! body
+
+The <<.place body>> of the definition has the following syntax:
+
+<$railroad text="""
+\start none
+\end none
+{[[<"wikitext">|WikiText]] "lf"}
+"""/>
+
+* <<.place wikitext>> is any sequence of characters that doesn't terminate the macro definition.
+** If [[nested procedures|Pragma: \procedure]] are used they need to be at the start of the wikitext. There are the same rules as if the wikitext would be in a tiddler.
+** Pragmas need to be before standard wikitext.
+
+* <<.place lf>> denotes a linefeed.
+
diff --git a/editions/tw5.com/tiddlers/macros/syntax/Procedure Syntax.tid b/editions/tw5.com/tiddlers/macros/syntax/Procedure Syntax.tid
new file mode 100644
index 000000000..2ef519fcc
--- /dev/null
+++ b/editions/tw5.com/tiddlers/macros/syntax/Procedure Syntax.tid
@@ -0,0 +1,11 @@
+created: 20240310165023000
+modified: 20240310173318213
+tags: Procedures
+title: Procedure Syntax
+type: text/vnd.tiddlywiki
+
+Plain text description can be found at [[Procedures]]
+
+<>
+
+<<.tip "The railroad boxes in the linked tiddlers can be used to navigate.">>
diff --git a/editions/tw5.com/tiddlers/procedures/Procedures.tid b/editions/tw5.com/tiddlers/procedures/Procedures.tid
index 15b422647..8c80e61f5 100644
--- a/editions/tw5.com/tiddlers/procedures/Procedures.tid
+++ b/editions/tw5.com/tiddlers/procedures/Procedures.tid
@@ -1,5 +1,5 @@
created: 20221007124007426
-modified: 20230419103154329
+modified: 20240310173130052
tags: Concepts Reference
title: Procedures
type: text/vnd.tiddlywiki
@@ -18,11 +18,13 @@ The name wrapped in double angled [[brackets|Brackets]] is used a shorthand way
```
<>
-<>
+<>
```
The parameters that are specified in the procedure call are made available as variables.
+<<.tip """If a procedure has more than 1 parameter, it is highly encouraged to use "named parameters", as shown in the second example above. Even if it is more to type, it will pay off in the long run.""">>
+
!! How Procedures Work
Procedures are implemented as a special kind of [[variable|Variables]]. The only thing that distinguishes them from ordinary variables is the way that the parameters are handled.
@@ -32,4 +34,4 @@ Procedures are implemented as a special kind of [[variable|Variables]]. The only
* [[Procedure Definitions]] describes how to create procedures
* [[Procedure Calls]] describes how to use procedures
* [[Procedure Parameter Handling]] describes how procedure parameters work
-
+* [[Procedure Syntax]] is a formal syntax description using railroad diagrams