Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

document.first_line_indentation падает #13

Open
danilasar opened this issue Jan 4, 2025 · 22 comments · Fixed by #14
Open

document.first_line_indentation падает #13

danilasar opened this issue Jan 4, 2025 · 22 comments · Fixed by #14
Assignees
Labels
баг Something isn't working

Comments

@danilasar
Copy link
Owner

В этом документе
report.zip
из-за зависимости

#import "@preview/codelst:2.0.2": sourcecode

происходит ошибка в conf.typ, а именно на 454 строчке:

for (i, elem) in doc.children.enumerate() {

Компилятор ожидает, что doc имеет тип text, и у данного типа нет свойства children. У меня очень большие подозрения на 474-488 строки, где происходит рекурсивный вызов функции first_line_indentation:

else if element == sequence {
	(self.document.first_line_indentation)(
		self,
		elem,
		last-is-heading: last-is-heading,
		indent-already-added: indent-already-added,
	)
} else if element == styled {
	styled((self.document.first_line_indentation)(
		self,
		elem.child,
		last-is-heading: last-is-heading,
		indent-already-added: indent-already-added,
	), elem.styles)
}

first_line_indentation писал не я и я не особо понимаю в целом, почему здесь происходит рекурсивный вызов, но очень похоже, что elem (или elem.child) является text и, соответственно, его скармливание в качестве doc ни к чему хорошему не приводит. Здесь точно нужна рекурсия?

@danilasar danilasar added the баг Something isn't working label Jan 4, 2025
@danilasar
Copy link
Owner Author

@aragami3070 думаю, ты в этой функции более компетентен

@aragami3070
Copy link
Collaborator

Если честно я ее тупа с обсуждения на гите взял, как отчет доделаю, завтра чекну

@aragami3070 aragami3070 self-assigned this Jan 4, 2025
@danilasar
Copy link
Owner Author

Пупупу, людям для отчёта как раз и нужно. Я тогда тоже сейчас гляну

@aragami3070
Copy link
Collaborator

капец
А зачем они этот модуль юзают?

@aragami3070
Copy link
Collaborator

мб я знаю как это по другому сделать, чтобы конфиг не править сейчас
@danilasar

@danilasar
Copy link
Owner Author

На будущее, я, спасибо всемогущему осинту, нашёл автора этого кода: typst/typst#311 (comment)

@danilasar
Copy link
Owner Author

капец А зачем они этот модуль юзают?

Чтобы сделать нумерацию строк кода в листингах

@aragami3070
Copy link
Collaborator

ща вроде видел норм вариант от самого typst

@aragami3070
Copy link
Collaborator

вроде нашел сейчас тестовый вариант накидаю, скину, если норм

@aragami3070
Copy link
Collaborator

https://typst.app/universe/package/algo/

попробуй algo, ту херню которую я начал тестить ты походу тоже видел, ибо я тоже на codelst при попытке загуглить вышел

@aragami3070
Copy link
Collaborator

@danilasar

@danilasar
Copy link
Owner Author

Я решил пойти внаглую и задал вопрос напрямую автору) В любом случае никто лучше него не объяснит назначение этих строк и не исключит в них ошибку. Кстати, параллельно гуглил решение по поводу красных строк и наткнулся на https://github.com/flaribbit/indenta, выглядит аппетитно

@danilasar
Copy link
Owner Author

https://typst.app/universe/package/algo/

попробуй algo, ту херню которую я начал тестить ты походу тоже видел, ибо я тоже на codelst при попытке загуглить вышел

Ща посмотрим

@aragami3070
Copy link
Collaborator

Я решил пойти внаглую и задал вопрос напрямую автору) В любом случае никто лучше него не объяснит назначение этих строк и не исключит в них ошибку. Кстати, параллельно гуглил решение по поводу красных строк и наткнулся на https://github.com/flaribbit/indenta, выглядит аппетитно

мб мб, посмотрим завтра, сейчас сложно параллельно два дела делать)

@danilasar danilasar self-assigned this Jan 4, 2025
@danilasar
Copy link
Owner Author

danilasar commented Jan 4, 2025

наткнулся на https://github.com/flaribbit/indenta, выглядит аппетитно

@preview/indenta выглядит сырой и заставить работать с ходу не получилось. Есть 3 стула:

  • Работает только на титульном листе
  • Не работает в принципе
  • Не компилируется и тоже падает на styled

в зависимости от конкретного расположения set par: перед import, перед show, конкретно в документе (не в conf.typ). Возможно, я чего-то просто не понимаю

@danilasar
Copy link
Owner Author

@danilasar
Copy link
Owner Author

https://forum.typst.app/t/how-to-indent-every-paragraph-excluding-headings/2137/2

На всё том же report.zip работает во всех случаях кроме абзаца после выровненной по левому краю таблицы. Это странно, ведь в примерах с форума решение работает железобетонно.

Также показалось, будто бы он игнорирует размер красной строки и вне зависимости от обстоятельств она будет 1.25em. Возможно, мне показалось и я от усталости уже не соображаю. В любом случае, нам всё равно вроде как столько и нужно, а, значит, годится как временное решение.

@danilasar
Copy link
Owner Author

После таблиц тоже заработало. Я думаю, стоит закоммитить это решение. Рассматриваю его как временное, потому что оно не выглядит универсальным. Но зато не ломает совместимость и не падает на styled)

@aragami3070
Copy link
Collaborator

Недавно обсуждали этот фикс, вроде сошлись на том, что оно не работает (как минимум у меня).
Думаю стоит открыть issue обратно. Оно либо билдится без красных строк, либо вообще не билдится (typst preview) и это печалит. Я бы вообще пока реверт фикса сделал (имхо)
Надеюсь у меня руки дойдут это пофиксить

@aragami3070 aragami3070 reopened this Feb 24, 2025
@aragami3070
Copy link
Collaborator

Кста, вот че нашел, мб typst нормальный фикс красных строк мерджнули, думаю имеет смысл завтра глянуть.
typst/typst#5768

@aragami3070
Copy link
Collaborator

Почекал. Вот этот вариант работает (ниже), но есть НО

#set par(
  first-line-indent: (amount: 12pt, all: true),
  spacing: 5pt,
  leading: 5pt,
)

Те НО:

  • lsp для typst пока еще не обновили и оно орет на это решение (не критично)
  • typst-preview, тоже пока не обновили => не работает typst-preview (обидно досадно, но никто не мешает стили в самом конце подрубать)

@aragami3070
Copy link
Collaborator

aragami3070 commented Feb 25, 2025

#set par(
first-line-indent: (amount: 12pt, all: true),
spacing: 5pt,
leading: 5pt,
)

Значения рандомные брал, нужно будет поиграться с точными значениями, но это уже не ко мне))))
А, и с той либой для кода не тестил (надеюсь официальное решение работает с либами)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
баг Something isn't working
Projects
None yet
2 participants