How to add content overlapping left margin?

Hi, everyone!

I have the following LaTeX document that I want to migrate to Typst.

Right now, I’m stuck on adding triangles to the left from each “Определение” declaration (and just simple comments). I tried using the following

#let accent = [#context{h(-measure(sym.triangle.stroked.r).width)}#sym.triangle.stroked.r]

I thought writing

#accent Слова могут быть как конечными, так и бесконечными (в одну или в обе стороны). В~дальнейшем, если не оговорено иное, под словами подразумеваются конечные слова.

should add horizontal shift of the whole line by width of the triangle. But result still looks a bit shifted to the right:
изображение

Looks like the problem is the space symbol between the triangle and the text. But I would like to leave it and to just shift the line further to the left.

You can use place to add content without affecting the layout of other content:

#let accent = context place(
  dx: -measure(sym.triangle.stroked.r).width - 0.5em,
  sym.triangle.stroked.r,
)
#accent #lorem(30)

(If using a fixed symbol like in this example, I would get rid of the context and measure and just tune the -0.5em to my liking.)

I think this works fine if you use place at the start of a paragraph. In the middle of a paragraph it would break the paragraph in two. In this case you’d have to take extra precautions as documented here (this will be in the documentation of the next release i.e. typst 0.12.0).

1 Like

Or you could use a trick that’s also mentioned in that new documentation: to get rid of the space caused by the space character in markup after #accent, add a weak horizontal spacing h(0pt, weak: true) at the end of your accent code.

Hello, comrade! If you want to mirror your LaTeX output you can use list.marker to change the used marker (or set an array of markers for nested lists).

#import "@preview/numberingx:0.0.1"
// #let date = state("lecture-date")
#let date = datetime(year: 2023, month: 3, day: 1)

#set page(
  margin: 2.2cm,
  header: context [Листок #here().page()#h(1fr)#date.display("[month].[year]")]
  // header: context {
  //   let d = if date.at(here()) != none {date.get().display("[month].[year]")}
  //   [Листок #here().page()#h(1fr)#d]
  // }
)
#set text(12pt, lang: "ru")
#set par(justify: true)
#set list(marker: sym.triangle.stroked.r)
#show heading: set align(center)
#show heading: set block(spacing: 1.5em)

// Doesn't work on the first page. :(
// #date.update(datetime(year: 2023, month: 3, day: 1))

= Многочлены и поля I. Корни и коэффициенты

- Слова могут быть как конечными, так и бесконечными (в одну или в обе стороны).
  В~дальнейшем, если не оговорено иное, под словами подразумеваются конечные
  слова.

- *Определение 1*. Монóм (от одной переменной, с коэффициентами в поле $K$) ---
  это формальная запись вида $a x^n$ ($n$ --- целое неотрицательное число, $a$
  --- элемент поля $K$, $x$ --- формальный символ).

  #h(1em)_Кольцом многочленов_ от одной переменной над полем $K$ называется
  множество $K[x]$ конечных формальных сумм мономов#footnote[примечание] с
  естественными операциям#highlight[и].

  *Задача 1*. Вычислите свободный член многочлена
  $underbrace((...((x - 2)^2 - 2)^2... - 2)^2, 200 "пар скобок")$.

  // *Задача 2*. а) Найдите сумму коэффициентов многочлена $(1 - x + x^2)^n$.\
  // б) $P$ --- ненулевой многочлен с действительными коэффициентами. Могут ли все
  // коэффициенты многочлена $P(x)(x - 1)$ быть неотрицательны?

  #set enum(numbering: numberingx.formatter("{lower-russian})"))
  *Задача 2*.
  + Найдите сумму коэффициентов многочлена $(1 - x + x^2)^n$.
  + $P$ --- ненулевой многочлен с действительными коэффициентами. Могут ли все
    коэффициенты многочлена $P(x)(x - 1)$ быть неотрицательны?

  *Задача 3*. Вычислите $mat(100;0) + 4mat(100;2) + ... + 2^100mat(100;100)$.

  *Задача 4*.
  + Пусть $A$, $B$ --- многочлены над полем $K$, $A != 0$. Докажите, что $B$
    ровно одним образом можно представить в виде $A Q + R$, где $Q, R in K[x],
    deg R < deg A$ (степень нулевого многочлена мы считаем равной $-oo$).
  + Верно ли это для многочленов над кольцом целых чисел?

- *Определение 2*. Многочлены $Q$ и $R$ из предыдущей задачи называются,
  соответственно, _неполным частным_ и _остатком_ при делении многочлена $B$ на
  многочлен $A$.

  *Задача 5*. Разделите с остатком $x^100$ на $x - 1$ и на $x + 1$.

  *Задача 6*. Докажите, что остаток от деления многочлена на $(x - a)$ есть
  значение этого многочлена в точке $a$ ("теорема Безу"). В частности, если
  $x_0$ --- корень многочлена $P$, то $P$ делится на многочлен $(x - x_0)$.

- *Определение 3*. Если многочлен $P$ делится на $(x - x_0)^k$, говорят, что
  $x_0$ является корнем многочлена $P$ _кратности_ не менее $k$.

  *Задача 7*. Докажите, что многочлен степени $n$ имеет не более $n$ корней.
  Докажите, что если два многочлена степени не выше $n$ совпадают в $(n + 1)$
  точке, то они равны.

  *Задача 8*. Многочлен с действительными коэффициентами в целых точках
  принимает целые значения. Обязательно ли все его коэффициенты целые?
  Рациональные?

  *Задача 9*. Приведите пример двух различных многочленов над каким-то полем $K$,
Output
Output (dark mode)

I found one typo, BTW. I highlighted it.

As a side note, I want to say that the topic title doesn’t make sense to me, so you probably should rephrase the question or describe it to me and I will come up with something. :)


Typst v0.12.0 update

In case the date is updated multiple times in the document, now you can set this up with:

...
// #let date = state("lecture-date", datetime(year: 2023, month: 3, day: 1))
#let date = state("lecture-date")

#set page(
  margin: 2.2cm,
  // header: context [Листок #here().page()#h(1fr)#date.display("[month].[year]")]
  header: context {
    let d = if date.at(here()) != none {date.get().display("[month].[year]")}
    [Листок #here().page()#h(1fr)#d]
  }
)
...

// Should be added before any content on the first page.
#date.update(datetime(year: 2023, month: 3, day: 1))
#pagebreak(weak: true) // Hack so that the update is seen on the first page.

#lorem(1000) // First page content.

// Update the "current" date:
#date.update(datetime(year: 2023, month: 4, day: 1))
// #pagebreak(weak: true) // Use this if you want to have a new "lecture"
// to start at the top of a new page. Otherwise the new date will only show up
// if this function call will be added on the first page.

If you don’t mind setting the date inside your set/show rules/template section, you can do this for the first page:

#let date = state("lecture-date", datetime(year: 2023, month: 3, day: 1))

Also using Can you make a horizontal `enum`/`list`? - #2 by ludwig as a reference I was able to perfectly copy the enum problem № 2 by still using the enum sugar syntax:

#import "@preview/numberingx:0.0.1"

#let horizontal-enum = it => {
  it
  .children
  .enumerate(start: it.start)
  .map(((n, child)) => numbering(it.numbering, n) + " " + child.body)
  .join(linebreak())
}

#set page(margin: 2.2cm)
#set text(12pt, lang: "ru")
#set par(justify: true)
#set list(marker: sym.triangle.stroked.r)

- *Определение 1*. Монóм (от одной переменной, с коэффициентами в поле $K$) ---
  это формальная запись вида $a x^n$ ($n$ --- целое неотрицательное число, $a$
  --- элемент поля $K$, $x$ --- формальный символ).

  #show enum: horizontal-enum
  #set enum(numbering: numberingx.formatter("{lower-russian})"))
  *Задача 2*.
  + Найдите сумму коэффициентов многочлена $(1 - x + x^2)^n$.
  + $P$ --- ненулевой многочлен с действительными коэффициентами. Могут ли все
    коэффициенты многочлена $P(x)(x - 1)$ быть неотрицательны?

  *Задача 3*. Вычислите $mat(100;0) + 4mat(100;2) + ... + 2^100mat(100;100)$.

image

This one, however, also works in v0.11.1. You can put the enum set/show rules at the start of the file, but depending on your document structure/content you might want to avoid it.