Closed yudai-nkt closed 6 years ago
Yes, currently the message indicates that the resolution reached a fixpoint. Here is an artificial example where the resolution cannot reach a fixpoint:
@require: stdja
let-inline \foo =
let bar =
match get-cross-reference `bar` with
| Some(`foo`) -> `bar`
| _ -> `foo`
in
let () = register-cross-reference `bar` bar in
{}
in
StdJa.document (|
title = {};
author = {};
show-title = false;
show-toc = false
|) '<
+section ?:(`sec:foo`) {Foo} <
+p {
This is Section \ref(`sec:fooo`);.
\foo;
}
>
>
So, in addition to the CrossRef.changed
flag, we may want to watch whether get-cross-reference
ever returned None
, and change the message accordingly.
Thanks for the explanation and the PR. I now understand how cross reference resolution works to some degree.
in addition to the
CrossRef.changed
flag, we may want to watch whetherget-cross-reference
ever returnedNone
Second it, that's the exact behavior I expected.
Consider the following
mwe.saty
. Note that\ref(`sec:fooo`);
is a typo on purpose.If we typeset this document, we obtain the log shown below and it claims
all cross references were solved.
after the 2nd trial.However, SATySFi obviously cannot find a label entry for
sec:fooo
and a question mark is printed on the output PDF. This situation wouldn't be considered as "solved" IMHO.