Hi Joel, On Mon, 2022-10-10 at 12:46 +0000, Joel wrote:
Hello Max, It is preferred if the solution is just three lines per paragraph, rather than some content parallel to the text
A Lua callback solution: \startluacode -- Constants RULE_OFFSET = tex.sp "1em" RULE_THICKNESS = tex.sp "0.4pt" RULE_LENGTH = tex.sp "3cm" -- Callback function userdata.lines(head) if status.output_active or tex.nest.ptr > 1 then return head end local i = 0 for n in node.traverseid(node.id "hlist", head) do i = i + 1 if i > 3 then break end local offset = node.new "glue" offset.width = RULE_OFFSET node.slide(n.list).next = offset local rule = node.new "rule" rule.width = RULE_LENGTH rule.height = RULE_THICKNESS rule.depth = 0 offset.next = rule end return head end nodes.tasks.appendaction( "finalizers", "after", "userdata.lines" ) \stopluacode \parskip=\baselineskip \starttext One line paragraph Two line paragraph \\ Two line paragraph Three line paragraph \\ Three line paragraph \\ Three line paragraph Four line paragraph \\ Four line paragraph \\ Four line paragraph \\ Four line paragraph \samplefile{bryson} \samplefile{knuth} \stoptext An \everypar solution: \appendtoks% \vbox to 0pt{% \dorecurse{3}{% \rlap{% \hskip\dimexpr\hsize+1em% \vrule height 0.4pt width 3cm% \relax% }% }% }% \to\everypar \parskip=\baselineskip \starttext One line paragraph Two line paragraph \\ Two line paragraph Three line paragraph \\ Three line paragraph \\ Three line paragraph Four line paragraph \\ Four line paragraph \\ Four line paragraph \\ Four line paragraph \samplefile{bryson} \samplefile{knuth} \stoptext Neither of these solutions are great though. Both of these solutions are pretty low-level, so there's presumably a more ConTeXt-y way of doing this. Thanks, -- Max