mirror of
https://github.com/typst/typst
synced 2025-05-15 01:25:28 +08:00
More flexible capability to control showing reference (#646)
This commit is contained in:
parent
8300f75f22
commit
a066a3d283
@ -102,6 +102,7 @@ impl Synthesize for HeadingElem {
|
|||||||
self.push_numbering(self.numbering(styles));
|
self.push_numbering(self.numbering(styles));
|
||||||
self.push_supplement(self.supplement(styles));
|
self.push_supplement(self.supplement(styles));
|
||||||
self.push_outlined(self.outlined(styles));
|
self.push_outlined(self.outlined(styles));
|
||||||
|
self.push_supplement(self.supplement(styles));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,12 +85,62 @@ pub struct RefElem {
|
|||||||
/// A synthesized citation.
|
/// A synthesized citation.
|
||||||
#[synthesized]
|
#[synthesized]
|
||||||
pub citation: Option<CiteElem>,
|
pub citation: Option<CiteElem>,
|
||||||
|
|
||||||
|
/// Content of the element, it should be referable.
|
||||||
|
///
|
||||||
|
/// ```example
|
||||||
|
/// #set heading(numbering: (..nums) => {
|
||||||
|
/// nums.pos().map(str).join(".")
|
||||||
|
/// }, supplement: [Chapt])
|
||||||
|
///
|
||||||
|
/// #show ref: it => {
|
||||||
|
/// if it.has("element") and it.element.func() == heading {
|
||||||
|
/// let element = it.element
|
||||||
|
/// "["
|
||||||
|
/// element.supplement
|
||||||
|
/// "-"
|
||||||
|
/// numbering(element.numbering, ..counter(heading).at(element.location()))
|
||||||
|
/// "]"
|
||||||
|
/// } else {
|
||||||
|
/// it
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// = Introduction <intro>
|
||||||
|
/// = Summary <sum>
|
||||||
|
/// == Subsection <sub>
|
||||||
|
/// @intro
|
||||||
|
///
|
||||||
|
/// @sum
|
||||||
|
///
|
||||||
|
/// @sub
|
||||||
|
/// ```
|
||||||
|
#[synthesized]
|
||||||
|
pub element: Option<Content>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Synthesize for RefElem {
|
impl Synthesize for RefElem {
|
||||||
fn synthesize(&mut self, vt: &mut Vt, styles: StyleChain) -> SourceResult<()> {
|
fn synthesize(&mut self, vt: &mut Vt, styles: StyleChain) -> SourceResult<()> {
|
||||||
let citation = self.to_citation(vt, styles)?;
|
let citation = self.to_citation(vt, styles)?;
|
||||||
self.push_citation(Some(citation));
|
self.push_citation(Some(citation));
|
||||||
|
|
||||||
|
if !vt.introspector.init() {
|
||||||
|
self.push_element(None);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the element content
|
||||||
|
let target = self.target();
|
||||||
|
let elem = vt.introspector.query_label(&self.target());
|
||||||
|
// not in bibliography, but in document, then push the element
|
||||||
|
if let (false, Ok(elem)) =
|
||||||
|
(BibliographyElem::has(vt, &target.0), elem.at(self.span()))
|
||||||
|
{
|
||||||
|
self.push_element(Some(elem));
|
||||||
|
} else {
|
||||||
|
self.push_element(None);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 175 KiB |
@ -19,3 +19,104 @@ As seen in @intro, we proceed.
|
|||||||
|
|
||||||
// Error: 1-5 label occurs multiple times in the document
|
// Error: 1-5 label occurs multiple times in the document
|
||||||
@foo
|
@foo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#show ref: it => {
|
||||||
|
if it.element != none and it.element.func() == figure {
|
||||||
|
let element = it.element
|
||||||
|
"["
|
||||||
|
element.supplement
|
||||||
|
"-"
|
||||||
|
str(element.counter.at(element.location()).at(0))
|
||||||
|
"]"
|
||||||
|
// it
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("/cylinder.svg", height: 3cm),
|
||||||
|
caption: [A sylinder.],
|
||||||
|
supplement: "Fig",
|
||||||
|
) <fig1>
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
image("/tiger.jpg", height: 3cm),
|
||||||
|
caption: [A tiger.],
|
||||||
|
supplement: "Figg",
|
||||||
|
) <fig2>
|
||||||
|
|
||||||
|
#figure(
|
||||||
|
$ A = 1 $,
|
||||||
|
kind: "equation",
|
||||||
|
supplement: "Equa",
|
||||||
|
|
||||||
|
) <eq1>
|
||||||
|
@fig1
|
||||||
|
|
||||||
|
@fig2
|
||||||
|
|
||||||
|
@eq1
|
||||||
|
|
||||||
|
---
|
||||||
|
#set heading(numbering: (..nums) => {
|
||||||
|
nums.pos().map(str).join(".")
|
||||||
|
}, supplement: [Chapt])
|
||||||
|
|
||||||
|
#show ref: it => {
|
||||||
|
if it.element != none and it.element.func() == heading {
|
||||||
|
let element = it.element
|
||||||
|
"["
|
||||||
|
emph(element.supplement)
|
||||||
|
"-"
|
||||||
|
numbering(element.numbering, ..counter(heading).at(element.location()))
|
||||||
|
"]"
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
= Introduction <intro>
|
||||||
|
|
||||||
|
= Summary <sum>
|
||||||
|
|
||||||
|
== Subsection <sub>
|
||||||
|
|
||||||
|
@intro
|
||||||
|
|
||||||
|
@sum
|
||||||
|
|
||||||
|
@sub
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#show ref: it => {
|
||||||
|
if it.element != none {
|
||||||
|
if it.element.func() == text {
|
||||||
|
let element = it.element
|
||||||
|
"["
|
||||||
|
element
|
||||||
|
"]"
|
||||||
|
} else if it.element.func() == underline {
|
||||||
|
let element = it.element
|
||||||
|
"{"
|
||||||
|
element
|
||||||
|
"}"
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@txt
|
||||||
|
|
||||||
|
Ref something unreferable <txt>
|
||||||
|
|
||||||
|
@under
|
||||||
|
#underline[
|
||||||
|
Some underline text.
|
||||||
|
] <under>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user