mlbvn / ml-yearning-vi

Một cuốn sách tập trung vào hướng dẫn cách cấu trúc các dự án Học Máy và phân tích cách làm cho các thuật toán Học Máy hoạt động.
900 stars 341 forks source link

Python file tạo pdf cho bản song ngữ và bản chỉ tiếng Việt #379

Closed quangnhat185 closed 4 years ago

quangnhat185 commented 4 years ago

Theo issue #376 của a Tiệp mình tạo một file python chỉ cần chạy (với điều kiện đã install các dependencies) thì sẽ convert 2 files markdown all_chapters.mdall_chapters_vietnamese_only.md ra file pdf. Các packages và operating system mình sử dụng bao gồm:

File pdf khi xuất ra có chất lượng khá tốt nhưng sắp xếp giữa các chương chưa được đẹp. Nếu các bạn có phương án để khắc phục vấn đề trên thì có thể góp ý ở PR này.

file mẫu pdf

tiepvupsu commented 4 years ago

@quangnhat185 cảm ơn em. Có một số thứ mình phải tìm cách sửa:

rootonchair commented 4 years ago

Thay vì dùng python thì mình dùng pandoc để tạo file pdf được không?

rootonchair commented 4 years ago

Hi @quangnhat185 Mình có thử tạo file pdf bằng pandoc thì có kết quả như sau: all_chapters_vietnamese_only.pdf

Mình dùng cú pháp pandoc sau để tạo file:

pandoc -f gfm -V linkcolor:blue --pdf-engine=xelatex -V geometry:margin=2cm\
 -V mainfont="Times New Roman"\
 -V geometry:a4paper\
 -V fontsize=12pt\
 all_chapters_vietnamese_only.md -o all_chapters_vietnamese_only.pdf

Tuy nhiên, xuất hiện những warning sau:

[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no Γ£ö (U+2714) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no 𝛽 (U+1D6FD) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no 𝛽 (U+1D6FD) in font Times New Roman/OT:script=latn;languag
[WARNING] Missing character: There is no 𝛽 (U+1D6FD) in font Times New Roman/OT:script=latn;languag

Mình không tạo file all_chapters được vì mình bị lỗi sau:

Error producing PDF.
! LaTeX Error: Something's wrong--perhaps a missing \item.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.340 \end{quote}

Mình đang dùng pandoc 2.8.0.1

Mong những thứ này giúp được bạn

Nguồn tham khảo:

https://learnbyexample.github.io/tutorial/ebook-generation/customizing-pandoc/

quangnhat185 commented 4 years ago

Thay vì dùng python thì mình dùng pandoc để tạo file pdf được không?

Thank @rootonchair nhiều, lúc đầu mình cũng tính dùng pandoc nhưng Latex không hỗ trợ tốt cho font tiếng Việt nên lỗi nhiều. Tuy nhiên pandoc lại hỗ trợ link subsection cho nên có thể mình sẽ nghiên cứu xem có cách nào sửa lỗi Latex không.

tiepvupsu commented 4 years ago

Mình có thử tạo file pdf bằng pandoc thì có kết quả như sau: all_chapters_vietnamese_only.pdf

Bản này đã click từ link đến chương được. Nhưng vẫn còn một số thứ anh muốn sửa:

quangnhat185 commented 4 years ago

test_introduction.pdf

rootonchair commented 4 years ago

@quangnhat185 bạn đã thử cách nhúng HTML giữa các chap khi gộp chưa?

Mình kiếm được câu trả lời này trên SO và có vẻ khá phù hợp với cách của bạn nữa

https://stackoverflow.com/a/29642392

tiepvupsu commented 4 years ago
  • @tiepvupsu Em đã fix được lỗi link subsection mà vẫn giữ được font gốc markdown. Vấn đề là do cú pháp hyperlink của markdown [#refer-to-something] không hỗ trợ tiếng việt nên khi convert qua pdf file tất cả link id bằng tiếng việt bị lỗi. Hiện tại em đang sửa thủ công từng chap nhưng sau này mình có thể thay toàn bộ phần mục lục về dạng .

Đừng làm thủ công em ơi, có cách lập trình được không? Viết thêm đoạn python vào thì sao?

tiepvupsu commented 4 years ago

@quangnhat185 anh đã áp dụng cách trên SO mà @rootonchair đề cập tại branch này: https://github.com/aivivn/Machine-Learning-Yearning-Vietnamese-Translation/blob/chapter_separator/chapters/all_chapters.md

Em thử chạy lại xem nó có tách được trang ra không?

quangnhat185 commented 4 years ago

@quangnhat185 anh đã áp dụng cách trên SO mà @rootonchair đề cập tại branch này: https://github.com/aivivn/Machine-Learning-Yearning-Vietnamese-Translation/blob/chapter_separator/chapters/all_chapters.md

Em thử chạy lại xem nó có tách được trang ra không?

YAY! IT WORKS :tada: ! Em thử convert trực tiếp từ file từ file md mà anh @tiepvupsu sửa thì không được, nhưng khi convert sang html rồi add dòng <div style="page-break-after: always;"></div> mà @rootonchair recommend thì thành công. Sau này mình có thể dùng python để tự động add dòng này vào file html. Mọi người có thể tham khảo file test ở dưới.

test_introduction_break_line.pdf

Đừng làm thủ công em ơi, có cách lập trình được không? Viết thêm đoạn python vào thì sao?

Ý em là lúc này mình đang dùng cú pháp [1. Chương 1][#1-chương-1] thì bị lỗi font hyperlink (hình). Em thử sửa file markdown về dạng html <a href="#chuong-1"> thì chạy ok nên em nghĩ mình có thể sửa lại file run.py phần gộp mục lục để sửa lỗi này.

image

tiepvupsu commented 4 years ago

@quangnhat185 đẹp rồi em. Em làm bản hoàn chỉnh cho cả hai version nhé (song ngữ và chỉ tiếng Việt). Em cũng tách riêng phần tên Part thành 1 trang giống như trong bản gốc tiếng Anh nhé.

Em có tạo được một file bash sao cho chỉ cần chạy file đó là ra luôn mỗi khi phải cập nhật không?

quangnhat185 commented 4 years ago

@quangnhat185 đẹp rồi em. Em làm bản hoàn chỉnh cho cả hai version nhé (song ngữ và chỉ tiếng Việt). Em cũng tách riêng phần tên Part thành 1 trang giống như trong bản gốc tiếng Anh nhé.

Em có tạo được một file bash sao cho chỉ cần chạy file đó là ra luôn mỗi khi phải cập nhật không?

Hiện tại em đang làm một file run_pdf_converter.py, sau khi chạy file run.py rồi chạy file này thì nó sẽ tự động cập nhật file pdf. Còn nếu không thì em có thể viết dưới dạng module import vào file run.py rồi sau này chỉ cần chạy một file là đủ. Không biết có phải đúng ý anh không?

tiepvupsu commented 4 years ago

@quangnhat185 em cho luôn vào file run.py đi, sau này chỉ chạy một lần là đủ.

tiepvupsu commented 4 years ago

@quangnhat185 có cập nhật gì không em?

quangnhat185 commented 4 years ago

@quangnhat185 có cập nhật gì không em?

Em vẫn đang đánh vật với automate việc sửa lỗi link subsection tron file pdf với lại mấy hôm nay em hơi bận nữa. Hay là em tạo một PR upload 2 file PDF trước (có đủ link subsection, page break) còn PR này để tập trung làm automate thôi anh?

tiepvupsu commented 4 years ago

@quangnhat185 có cập nhật gì không em?

Em vẫn đang đánh vật với automate việc sửa lỗi link subsection tron file pdf với lại mấy hôm nay em hơi bận nữa. Hay là em tạo một PR upload 2 file PDF trước (có đủ link subsection, page break) còn PR này để tập trung làm automate thôi anh?

Được em. Em cứ tạo file pdf từ bản có sẵn đi rồi anh approve luôn.

Phần link subsection em cứ tạo một PR riêng, khó chỗ nào thì cc anh để anh xem có giải quyết được không.

Nhân tiện, em tham gia slack nhóm dịch đi để tiện thảo luận: https://docs.google.com/forms/d/e/1FAIpQLScYforPRBn0oDhqSV_zTpzkxCAf0F7Cke13QS2tqXrJ8LxisQ/viewform

quangnhat185 commented 4 years ago

Em close PR này để mở PR mới tập trung vào lỗi em đang gặp