cetz icon indicating copy to clipboard operation
cetz copied to clipboard

[proposal] Syntax for the previous element

Open tapyu opened this issue 1 year ago • 2 comments

Inspired by () for the previous coordinate, I propose anything equivalent to refer to a previous element. For instance:

line((y: 10), (rel: (x: 10)), mark: (end: ">"))
line("{}.5%", (rel: (y: 10)), mark: (end: ">"))

where {} would refer to the last element (i.e., the line).

Motivation

Although name: "my-name" would also serve for this purpose, I frequently find myself in a situation where I want to refer to the previous element as an starting point for the next element, and nothing more. Creating a label for this purpose seems an overkill and makes the syntax unnecessarily lengthy. I do believe that this proposal would make the typst syntax even more convenient. Regarding using "{}" or something else, it is opened to discussions.

tapyu avatar May 24 '24 15:05 tapyu

Using version 0.2.2, it seems like the same name can be used multiple times in a context, and only the latest usage stays addressable. So as a stopgap you can give all elements the name "{}" (or even "") by default and address the latest unnamed element like "{}.30deg" (or ".30deg")

let line = line.with(name: "")
line((y: 10), (rel: (x: 10)), mark: (end: ">"))
line(".5%", (rel: (y: 10)), mark: (end: ">"))

Bahex avatar Jul 09 '24 05:07 Bahex

I know that. The point of this issue is to propose making this name built-in so that we don't need to name all elements as "{}" or something. If you think let line = line.with(name: "{}") is already enough to address it, so I will close this issue.

tapyu avatar Jul 09 '24 12:07 tapyu