Here's your code that doesn't work:
```
\define listtitle() ''Books by $(currentTiddler)$''
\define filter() "[tag[$(currentTiddler)$]tag[Book]]"
<$list filter=<<filter>> variable="_"> <<listtitle> </$list>
<<list-links filter:"[tag[$(currentTiddler)$]tag[Book]]">>
```
Here's what's wrong:
1) There is a missing `>` at the end of `<<listtitle>`. As a result, the macro call isn't closed until the final `>>` at the end of the code. All the content between the error and the ending `>>` are treated as parameters to the macro.
2) The `$(variablename)$` syntax is only parsed when it occurs within a macro. Thus, `"[tag[$(currentTiddler)$]tag[Book]"` is actually looking for a literal tag value of `$(currentTiddler)$`.
3) You don't need the double-quotes around the content of `\define filter() "..."`.
4) If there are multiple Book tiddlers for the current Author, your `<$list>` widget (with the correction for the missing `>`) would display the `<<listtitle>>` text multiple times, once for each matching Book tiddler.
5) You don't actually need to use `$(currentTiddler)$` anywhere in the above code... `<<currentTiddler>>` (or `<currentTiddler>` within a filter) is sufficient. In fact, you don't need to use any macros at all.
Here's some corrected/simplified code:
```
<$list filter="[tag<currentTiddler>tag[Book]limit[1]]" variable="_">''Books by <<currentTiddler>>''</$list>
<<list-links filter:"[tag<currentTiddler>tag[Book]]">>
```
Notes:
1) The filter for the heading uses `limit[1]` so that the heading text is only displayed once, regardless of how many matching Book tiddlers are found.
enjoy,
-e