typst-drafting icon indicating copy to clipboard operation
typst-drafting copied to clipboard

Towards a more flexible margin-note implementation

Open alarsyo opened this issue 1 year ago • 3 comments

Hi! Thanks for the very useful package, I'm opening this issue to start a discussion around margin notes. Here is the issue that I'm hitting in another package: https://github.com/nogula/tufte-memo/issues/5, prompting me to discuss things here :)

So tufte-memo uses drafting's margin notes to implement its own margin notes (which work like numbered footnotes), but is hitting issues related to how the current margin-note interface works:

  • either dy is left to auto, and notes are automatically shifted to not overlap, as much as possible
  • or dy is set to a value, and notes are not automatically shifted when overlapping

tufte-memo currently made the choice to set dy to -2em to try to align a margin note with the line where it originated (instead of starting the note "1 line below", which seems to be the default for drafting). But in doing so, its users miss out on the auto-shift feature.

I think there are several solutions to this problem:

  • The ergonomic "auto-shift" feature could be decoupled from dy: as a user, I could hint to where I want the note to be placed by default, AND want the package to move it to the best place should it overlap with another note.
  • drafting could provide a global setting for how margin notes should be positioned relative to the line where they were created (this would be different from dy, which is a granular, per-note adjustment)
  • If you think this is out of scope for drafting, then tufte-memo should implement its own margin note rendering logic (or even better, depend on a common hypothetical margin-notes package which is flexible enough to suit both tufte-memo and drafting's use cases?)
  • Maybe it's already possible to achieve such functionality, in this case I couldn't find how :)

alarsyo avatar Jan 27 '25 12:01 alarsyo

Thanks for the issue request! It's definitely planned, and ideas around modifying the "margin trail" and positioning already came up in the most recent PR (see https://github.com/ntjess/typst-drafting/pull/18#issuecomment-2540414011). Curious if @Tinggaard has thoughts around it since they brought up the modification initially

ntjess avatar Jan 27 '25 15:01 ntjess

As Nathan said, the plan is to allow the user to move the default placement of the note, which would resolve you issue.

As a temporary workaround, you could maybe do something like this:

#import "@preview/drafting:0.2.1": *

#set page(paper: "a7", flipped: true, margin: (right: 3cm))

#let my-rect(
  stroke: none,
  fill: none,
  width: 0pt,
  body
) = move(
  dy: -1.57em,
  rect(
    stroke: stroke, 
    fill: fill, 
    width: width, 
    body
  )
)

#set-margin-note-defaults(rect: my-rect)

#set-page-properties()

#lorem(30)
#margin-note[hello]
#margin-note(stroke: blue)[hello]
#lorem(20)

Image

It is very hacky, I know. Currently, the line to the note is drawn far into the margin, and thus moving the note only a half a line (or multiple lines) up or down will leave you with a funky layout that doesn't make much sense...

Tinggaard avatar Jan 27 '25 16:01 Tinggaard

Awesome, I'd missed this discussion! Thanks for the quick replies :)

alarsyo avatar Jan 27 '25 21:01 alarsyo