- l have a fle to include all fles, like
A.typ
will includeA.1.typ
,A.2.typ
, andA.1.typ
will includeA.1/A.2.1.typ
,A.1/A.2.2.typ
- the fles may link to each other too,
A.2/A.2.1.typ
will includeA.1/A.1.1.typ
. To slove this problem, l think the only way is to includeA.1/A.1.1.typ
in A.2/A.2.1.typ` - Make in
A.typ
, the order of the files is alwaysA.1.typ
,A.1/A.1.1.typ
,A.2.typ
,A.2.1.typ
. InA.2.typ
the order isA.2/A.2.1.typ
,A.1/A.1.1.typ
(An order can contrl by myself, and files that would not otherwise be included but are linked to will be included last)
In this example, the A.typ
will include A.2/A.2.1.typ
twice, and two same lables.
Now i try to use this code to do it(Don’t mind changing it, I don’t hink it works well):
// Check is a file has been included
#let check_included(label) = {query(label) != ()}
#let check_link(label, description) = {
if check_included(label) {
// check lable
link(label, description)
} else [
#description
]
}
#let check_path(path) = {
// Don't care it
let path_list = path.split("/")
let output=(path_list.at(0), )
for i in range(1, path_list.len()) {
if path_list.at(i) == ".."{
let temp = output.pop()
} else if path_list.at(i) == "."{
} else {
output.push(path_list.at(i))
}
}
output.join("/")
}
#let creat_link(file: "", description: "", label_in: "", need_include: ("", ), include_list: ("", ), root: "") = {
// the function I use to creat link(Maybe it can be deleted)
if file == "" and label_in == ""{
panic("No file, No lable. What do you want to do?")
}
let real_path = check_path(root + file)
if real_path in include_list {
// include_list = move_item(include_list, real_path)
} else {
need_include = ((real_path, ) + need_include)
}
let output = context {check_link(label(real_path), description)}
if label_in != "" {
output = context {check_link(label(label_in), description)}
}
if file == "" {
output
} else {
(output, need_include)
}
}
#let include_item(include_list) = {
// I want to use check_include here to make sure there is no document included twice.
for i in include_list [
#if i != "" [
#[]#label(i)
#include i
]
]
}
#let append_include(include_list, doc) = [
// append the files are included
#doc
#include_item(include_list)
]