<div dir="ltr">Semantically, &quot;an operation [in Scribble] doesn’t care whether it’s used with [...] or {...}.&quot; Therefore, it would be useful if Scribble expressions were not syntactically limited to the form @ ‹cmd› [ ‹datum›* ] { ‹text-body› }, and instead allowed text-mode and racket-mode arguments to be freely &amp; indefinitely sequenced.<div>
<br></div><div style>What I&#39;ve found using Scribble is that many of the functions one writes are, of course, intended to operate on a text argument. So the text-mode argument naturally wants to come first in the function:</div>
<div style><br></div><div style>@cross-ref{This text}</div><div style><br></div><div style>Now, suppose I want to add an optional second argument. The natural place for this optional argument would be after the first:</div>
<div style><br></div><div style>@cross-ref{This text}[&quot;where.html&quot;]  </div><div style><br></div><div style>or</div><div style><br></div><div style>@cross-ref{This text){where.html}<br></div><div style><br></div>
<div style>But AFAIK, Scribble forbids these patterns. So I might try this:</div><div style><br></div><div style>@cross-ref[&quot;where.html&quot;]{This text}</div><div style><br></div><div style>But that doesn&#39;t work either, because the cross-ref function expects the target text to be in the first position. So either I must forego idiomatic Scribble expressions altogether:</div>
<div style><br></div><div style>@(cross-ref &quot;This text&quot; &quot;where.html&quot;) </div><div style><br></div><div style>Or use a keyword argument:</div><div style><br></div><div style>@cross-ref[#:destination &quot;where.html&quot;]{This text}</div>
<div style><br></div><div style>As a workaround, that&#39;s OK. But at this point, Scribble is reaching up into my code and starting to impose design restrictions (namely, keyword arguments) that have ripple effects elsewhere.</div>
</div>