lucas-
Senior Member
vậy mình đơn giản là đưa file trên pc vô dropbox rồi trên mobile cũng mở trực tiếp file trên đó luôn hay có phải làm gì khác không thím?Đúng rồi fen, nó là mấy file text thôi mà, không có mạng vẫn xài bình thường ...
![]()
vậy mình đơn giản là đưa file trên pc vô dropbox rồi trên mobile cũng mở trực tiếp file trên đó luôn hay có phải làm gì khác không thím?Đúng rồi fen, nó là mấy file text thôi mà, không có mạng vẫn xài bình thường ...
![]()
Xài ios hay android bácvậy mình đơn giản là đưa file trên pc vô dropbox rồi trên mobile cũng mở trực tiếp file trên đó luôn hay có phải làm gì khác không thím?
android thím, mà mình chưa dùng, chỉ muốn hỏi ae đã dùng để cân nhắc vì thấy việc xem được trên mobile cũng có một số lợi ích nhất địnhXài ios hay android bác
Nói chung obsidian bác cứ hiểu là nó tạo 1 folder có các file text bth, nó chỉ là quản lý mấy file đó thôi (tức là k có mạng, hoặc thậm chí k có Ob vẫn coi đc). Nên mục tiêu là sync folder giữa PC và mobile. Điều này icloud best. Còn android em chưa tìm ra cách để sync trực tiếp qua dịch vụ cloud.android thím, mà mình chưa dùng, chỉ muốn hỏi ae đã dùng để cân nhắc vì thấy việc xem được trên mobile cũng có một số lợi ích nhất định

```dataviewjs
const groups = ["terminology","topic","book","course","other"];
const pages = dv.pages();
function getHeading(page){
let con = [];
for (let l of page.file.lists){
let cri = l.text.includes(dv.current().file.name);
if (cri){
let s_link = "'"+l.section+"'";
let link_text = l.section.toString().slice(2,-2);
let link_split = link_text.split("|");
let alias = link_split[1].slice(link_split[1].lastIndexOf(">")+1);
let link = dv.fileLink(link_split[0],false,alias);
let arr = dv.array([page.file.link, link , page.file.cday]);
con = con.concat(arr);
}
}
return con;
}
for (let group of groups){
dv.header(2, group.charAt(0).toUpperCase() + group.slice(1).replace("y","ie") + "s");
let list = [];
for (let page of pages){
let con1 = page.file.lists.text.filter((t) => t.includes(dv.current().file.name)).length > 0;
let con2 = page.file.tags.filter(t => t.includes(group)).length > 0;
let con3 = page.file.tags.every(t => groups.slice(0,-1).filter(g => t.includes(g)).length == 0);
if (group != 'other' && con1 && con2){
let test = getHeading(page);
list = list.concat(test);
}else if(group == 'other' && con1 && con3){
let test = getHeading(page);
list = list.concat(test);
}
}
dv.table(["File","Heading","Created Day"],list);
}
```
const groups = ["terminology","topic","book","project","other","course","function"];
const pages = dv.pages();
for (let group of groups){
let list = [];
for (let page of pages){
//con for check contain mentioned in both in note's name and aliases (bc alias link also head filename)
let con1 = page.file.lists.text.filter(t => t.includes(dv.current().file.name)).length > 0;
//con for check contain tag in note
let con2 = page.file.tags.filter(t => t.includes(group)).length > 0;
// con for check tag in note is not in given group for other
let con3 = page.file.tags.every(t => groups.filter(g => t.includes(g) && g !== "other").length == 0);
// con for remove self mentioned
let con4 = page.file.name != dv.current().file.name;
//check file aliases
//let con5 = dv.current().file.aliases.filter(a => page.file.lists.text.filter(t => t.includes(a)).length > 0).length > 0;
if (group != 'other' && con1 && con2 && con4 ){
let test = getHeading(page);
list = list.concat(test);
}else if(group == 'other' && con1 && con3 && con4){
let test = getHeading(page);
list = list.concat(test);
}
}
//unique values
let ulist = dv.array(list).distinct();
//print out table
if (ulist.length > 0){
dv.header(4, group.charAt(0).toUpperCase() + group.slice(1).replace("y","ie") + "s");
dv.table(["File","Heading","Created Day"],ulist);
this.container.querySelectorAll(".table-view-table td").forEach(s => s.style.width ="300px");
}
}
// for working with heading and each row
function getHeading(page){
let con = [];
for (let l of page.file.lists){
//cri for check if list in heading contain mentions (this is why can't use normal query)
let cri = l.text.includes(dv.current().file.name);
if (cri){
//convert link object to text with remove square bracket (format \[\[note_name#heading|note_name > heading]])
let link_text = l.section.toString().slice(2,-2);
// splite link to array of link and title by |
let link_split = link_text.split("|");
// generate alias (for note without heading) or heading by slicing in title string
let alias = link_split[1].slice(link_split[1].lastIndexOf(">")+1);
// regenerate link with only Heading or Filename for the title
let link = dv.fileLink(link_split[0],false,alias);
// combine link of file, link of heading, created day into row
let arr = dv.array([page.file.link, link , page.file.cday]);
con = con.concat(arr);
}
}
return con;
}
Con này giống Floop mới của win, ngốn RAM lắm!Mấy thím thử con hàng AppFlowy chưa, dùng cũng mướt phết![]()
GitHub - AppFlowy-IO/AppFlowy: AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust. (https://github.com/AppFlowy-IO/AppFlowy)
Con hàng này còn nhiều bug với hạn chế.Mấy thím thử con hàng AppFlowy chưa, dùng cũng mướt phết![]()
GitHub - AppFlowy-IO/AppFlowy: AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust. (https://github.com/AppFlowy-IO/AppFlowy)
Dùng Obsidian vẫn hơn Notion chứ!Con hàng này còn nhiều bug với hạn chế.
Chưa so được với Notion.
Sơ sơ thì:
1. Bug: bôi đen text, chuột phải, di chuột đến cái icon cuối cùng trong trình đơn hiện ra -> cái app treo cứng luôn.
2. Không/chưa hỗ trợ import từ Notion hoặc 1 thằng .md nào tương tự. Hoặc là mình chưa biết cách.
3. Copy/paste ảnh trực tiếp từ web vào nó không hiện ảnh. Phải tải ảnh về rồi paste vô mới nhận.
4. Chưa có heading toggle như Notion.
......

!
Làm ntn vậy bácĐá lên!
Dùng obisdian để làm file báo cáo bằng ngôn ngữ latex công nhận đỉnh vãi
Biết 1 chút python + markdown là ok
Xem tệp đính kèm 2308216

Thím cài Python ,pandoc , mirktex (nhớ cài bản đầy đủ)Làm ntn vậy bác![]()

python3 [đường dẫn đến thư mục script trong vault]\[tên-file].py {{file_path:absolute}}
Quào h mới biết shell command được, tk bác.Thím cài Python ,pandoc , mirktex (nhớ cài bản đầy đủ)
xong thím cài pip vào và cài 2 gói unidecode với python-frontmatter python
Xong thím dùng script python tại đây, lưu về đổi tên thành convert.py tên gì tuỳ thích.
Xong thím tạo 1 file markdown để test thử trước khi làm bước tiếp theo.
Lưu ý, file markdown thím tạo phải có frontmatter
Ví dụ:
---
title: <tên thích tuỳ thím>
author: <tên của thím>
---
[nội dung]
----
Thím test thử trên terminal. Nếu ưng ý thì qua bước thứ 2 là tích hợp script này vào vault của thím.
Thím vào vault của thím, tạo 1 folder gọi là script <hay tuỳ ý thím>, bỏ file script của thím vào.
Xong thím cài plugin Shell command trong Obsidian và config như hình
Xem tệp đính kèm 2308335
Lưu ý :
Mã:python3 [đường dẫn đến thư mục script trong vault]\main.py {{file_path:absolute}}
Phần em bôi đậm chính là đường dẫn.
Xong mỗi khi thím cần output ra pdf thì bấm ctrl + p, chọn Shell là nó chạy![]()
Thím nhớ test thử ở 1 folder nhỏ , tạo 1 file md nhỏ xong test thử nhé.Quào h mới biết shell command được, tk bác.
Ok bác. Mà obsidian có chức năng recovery, với em cũng backup lên onedrive nên cũng không sợ lắmThím nhớ test thử ở 1 folder nhỏ , tạo 1 file md nhỏ xong test thử nhé.

Làm được chưa thímOk bác. Mà obsidian có chức năng recovery, với em cũng backup lên onedrive nên cũng không sợ lắm![]()
Được rồi bác, cài th Miktex hơi nhằn, với e xài venv nên phải chỉnh tíLàm được chưa thím![]()

