Hướng dẫn Giới thiệu biên tập ebook bằng Calibre Editor

Thảo luận trong 'Hướng dẫn chung' bắt đầu bởi inno14, 15/9/17.

  1. inno14

    inno14 Lớp 8

    Calibre ngoài chức năng quá quen thuộc là convert các định dạng thì nó còn kèm theo các chương trình tiện ích kèm theo như ebook-viewer, ebook-edit. Ebook-viewer mình đã viết 1 bài giới thiệu rồi, hôm nay viết tiếp bài giới thiệu về ebook-edit cho trọn vẹn :D.
    Ebook-edit là một chương trình biên tập ebook tương tự với Sigil nhưng ít được người dùng biết đến. Sau đây là bài giới thiệu tổng quát, mời các bạn theo dõi:
    A. Bước chuẩn bị - xử lý nguồn tex.
    Dữ liệu nguồn có thể là txt, html, hoặc docx. Mình xin lấy docx để minh họa vì sự phổ biến của nó nhé. Ví dụ chúng ta có dữ liệu nguồn thế này
    [​IMG]
    Các bước xử lý cơ bản như sau:
    1. Giữ định dạng nghiêng
    Bấm tổ hợp Ctrl+h để vào Find and Repalce
    Tại ô Find các bạn để trống và bấm tổ hợp phím Ctrl+i
    Tại ô Repalce các bạn điền <i>^&</i>
    Replace All
    [​IMG]
    2. Giữ định dạng đậm
    Tại ô Find các bạn để trống và bấm tổ hợp phím Ctrl+b
    Tại ô Repalce các bạn điền <b>^&</b>
    Replace All
    [​IMG]
    3. Gắn thẻ <p>
    Trở về đầu văn bản và enter xuống 1 dòng trắng.
    Bấm tổ hợp Ctrl+h để vào Find and Repalce
    Tại ô Find các bạn bấm vào No Formatting để xóa định dạng nếu có và điền ^p
    Tại ô Repalce các bạn điền </p>^p<p>
    Replace All
    * chú ý nếu có line break các bạn làm thêm 1 lần nữa với ^l
    [​IMG]
    Dữ liệu sau khi xử lý sẽ như hình:
    [​IMG]

    B. Vào chương trình Ebook edit
    1. Kích hoạt chương trình trong thư mục Calibre
    [​IMG]
    2. Tạo 1 ebook mới
    [​IMG]
    3. Khai báo metadata (Tên ebook, tác giả) và định dạng ebook (có 2 loại là epub và azw3, mình dùng kindle nên chọn azw3 nhé :) )
    [​IMG]
    4. Xác định Cover
    [​IMG]
    5. Chép dữ liệu nguồn vào cửa sổ soạn thảo

    Copy từ thẻ <p> đầu tiên đến hết ở word và dán vào phần giữa thẻ <body>. Kết quả như hình.
    [​IMG]
    6. Bố cục heading

    Đặt con trỏ tại thẻ <p> muốn đặt heading, bấm vào biểu tượng chữ H để xác định.
    [​IMG]
    7. Tạo css (style định dạng văn bản)

    • Click vào biểu tượng New file
    [​IMG]
    • Đặt tên với cú pháp: ten.css
    [​IMG]
    • Soạn thảo css (tham khảo tại box hướng dẫn biên tập epub của diễn đàn nhé, giống nhau thui)
    [​IMG]
    • Kết nối html với css, click phải (1 hoặc nhiều html) chọn Link stylesheet
    [​IMG]
    Chọn css đã soạn và ok
    [​IMG]

    8. Bật hộp thoại Find & Replace
    [​IMG]
    ---Xem tiếp #2---
     
    72thudo, tducchau, nhanjkl and 25 others like this.
  2. inno14

    inno14 Lớp 8

    9. Làm chú thích (làm khi chưa phân tách html nhé)
    Nội dung chú thích phải được đặt theo cú pháp ^[nội dung chú thích] và nằm sau từ cần chú thích.
    [​IMG]
    • Chèn class chú thích
    Di chuyển đến cuối tài liệu (Ctrl+end). Thêm dòng code sau vào trước thẻ kết thúc </body>. Sau đó bấm vào biểu tượng bông hoa để chương trình tút lại code cho đúng chuẩn mới chạy tiếp lệnh được nhé :)
    Mã:
    <p class="chuthich">Chú Thích</p>
    [​IMG]
    • Dịch chuyển chú thích
    Chế độ Regex nhé các bạn
    Ô Find soạn code như sau (copy paste nhé):
    Mã:
    \^\[(.*?)\](?s)(.*?</p>)(.*?)(
    
    </body>)
    Ô Replace code như sau:
    Mã:
    [*]\2\3<p>[*]\1</p>\4
    Replace all đến khi nào hết chú thích nhé (bấm cực lực vào). Xong hết chú thích rồi nhớ bấm bông hoa cái nữa nhé.
    [​IMG]
    [​IMG]
    • Ngắt chú thích thành html độc lập
    Click phải vào khung soạn thảo rùi làm theo hình nhé
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    • Đánh số chú thích
    * Lúc này mình phải chuyển chế độ sang Regex_function và current file nhé.
    [​IMG]
    * Bấm vào Create/edit để chép đoạn code sau đây vào hộp thoại bung ra nhé, và đặt cho nó cái tên nhé (mình đặt là note_number).
    Mã:
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        note_number = '%d' % number
        return "[" + note_number + "]"
    
    # Ensure that when running over multiple files, the files are processed
    # in the order in which they appear in the book
    replace.file_order = 'spine'
    [​IMG]
    * Chạy lần lượt cho từng html các lệnh sau
    Ô Find: \[\*\]
    Ô Function: note_number
    Mode Regex_function - Current file
    Replace all nhé
    [​IMG]
    [​IMG]
    [​IMG]
    • Liên kết chú thích
    Chuyển về chế độ Regex - Current file nhé
    * html nội dung:
    Find:
    \[(\d+)\]
    Replace:
    <a id="b\1" href="part0000_split1.html#n\1"><sup>[\1]</sup></a>
    [​IMG]
    [​IMG]
    * htm chứa chú thích
    Find:
    <p>\[(\d+)\]
    Replace:
    <p id="n\1"><a href="part0000.html#b\1"><sup>[\1]</sup></a>
    [​IMG]
    [​IMG]
    ---xem tiếp #3---
     
  3. inno14

    inno14 Lớp 8

    10. Tách html
    Mình ví dụ cho thẻ h1, các trường hợp khác tương tự. Nhấp phải vào khung soạn thảo và làm như hình nhé
    [​IMG]
    [​IMG]
    [​IMG]

    11. Tạo mục lục
    [​IMG]
    [​IMG]

    ---Hết---
     
    Chỉnh sửa cuối: 15/9/17
    tducchau, LRC, buturu.dnsg and 16 others like this.
  4. inno14

    inno14 Lớp 8

    Phần thêm 25/9/2017: Thẻ div với một số thế combo đơn giản để định dạng văn bản
    • Các bạn xem hình minh họa sẽ thấy các thẻ p đều rất sạch nhé, tất cả là nhờ vào các đòn combo của thẻ div đấy
    [​IMG]
    • Ảnh & code trình bày các thế combo của thẻ div
    [​IMG]
    Mã:
    p{ /*Thẻ p sẽ được định dạng tổng quát cho toàn bộ ebook*/
      margin:0;
      text-indent: 2em;
      text-align: justify;
      }
    div.tho p { /*ý nghĩa combo: định dạng cho các thẻ p nằm trong cặp thẻ div có class tho*/
      text-indent: 0;
      text-align: center;
      color: blue;
      font-style: italic;
      }
    div.chapter p{ /*ý nghĩa combo: định dạng cho các thẻ p nằm trong cặp thẻ div có class chapter*/
      text-indent: 0;
      text-align: center;
      background-color: pink;
      color: red;
      font-size: 1.2em;
      }
    div.chapter + p{ /*ý nghĩa combo: định dạng cho thẻ p nằm ngay sau cặp thẻ div có class chapter*/
      text-indent: 0;
      }
    div.chapter + p:first-letter{ /*ý nghĩa combo: định dạng cho ký tự đầu tiên của thẻ p nằm ngay sau cặp thẻ div có class chapter*/
      font-size: 3em;
      float: left;
      margin: -0.2em 0em -0.2em 0em; /*top right bottom left*/
      }
    
     
  5. inno14

    inno14 Lớp 8

    Phần thêm 25/9/2017: Tạo Mục Lục bằng Xpath, chỉnh sửa nội dung TOC hiển thị ở toc.ncx, đính kèm trang mục lục vào ebook.
    1. Tạo Mục Lục bằng Xpath
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]

    2. Chỉnh sửa nội dung TOC hiển thị ở toc.ncx (nội dung mục lục này sẽ hiển thị trong Table of Content của các app đọc epub). Có thể dùng regex / current file để sửa hàng loạt.
    [​IMG]

    3. Đính kèm trang mục lục vào ebook (một số thích, một số không, tùy ý mọi người, nhưng nếu đã đính thì phải đẹp :) ). Làm sau khi đã chỉnh sửa hoàn thiện mục 2.
    [​IMG]
    • Trang toc.xhtml sẽ được chèn vào đầu ebook
    [​IMG]
    • Áp dụng các thế combo để định dạng cho trang toc.xhtml này nhé
    [​IMG]
    Mã:
    /* Styles cho trang mục lục đính vào nội dung ebook */
    ul.level1 li{
      text-indent: 0;
      text-align: center;
      font-size: 0.8em;
      margin: 0.5em 0em 0.5em 0em; /*top right bottom left*/ /* xác định khoảng cách giữ các thẻ li*/
      line-height: 1.5em; /* xác định khoảng cách xuống dòng cho thẻ br trong thẻ li */
      }
     
  6. inno14

    inno14 Lớp 8

    Phần thêm 25/9/2017: Một số quy ước cơ bản ở chế độ tìm kiếm regex và ví dụ
    * 1 cụm bất kỳ kể cả khoảng trắng được quy ước là: .*?
    * Số tự nhiên: d+
    * Tìm chính xác 1 ký tự đặc biệt: \ (ví dụ \? \* \^)
    * Ký tự unicode: \p{L}
    * Ký tự unicode viết hoa: \p{Lu}
    * Ký tự unicode viết thường: \p{Ll}
    * Phân nhóm 1 chuỗi bằng bộ () trả về giá trị tương ứng với vị trí xuất hiện của () ví dụ \1 \2 \3
    * Bộ [] dùng để chứa các lựa chọn khi tìm kiếm (hoặc cái này hoặc cái kia)
    * Bộ {} chứa số lần lặp lại
    ----
    Ví dụ 1: sửa lỗi không viết hoa sau dấu chấm, dấu chấm hỏi, dấu chấm than mình lập cú pháp ở chế độ Regex-function - Case sensitive
    Find: ([\.\?\!]) (\p{Ll})
    Function: Upper-case text (click mũi tên và chọn trong phần Function)
    [​IMG]
    [​IMG]

    Ví dụ 2: tìm chương để gắn thẻ div.chapter Lúc này chuyển về chế độ Regex
    Find: <p>(Chương) (.*?)</p>
    Replace: <div class="chapter"><p>\1 \2</p></div>
    Replace all
    [​IMG]

    Ví dụ 3: ngắt dòng nội dung chương tại số chương là 1 số tự nhiên
    Find: <p>(Chương) (\d+) (.*?)</p>
    Replace: <p>\1 \2<br/>\3</p>
    [​IMG]

    Ví dụ 4: ngắt dòng nội dung chương tại số chương là số la mã
    Find: <p>(Chương) ([IVXLCDM]{0,10}) (.*?)</p>
    Replace: <p>\1 \2<br/>\3</p>
    [​IMG]
     
    tducchau, amylee, vinaguy and 9 others like this.
  7. inno14

    inno14 Lớp 8

    Phần thêm 26/9/2017: Cài từ điển tiếng Việt và cách dùng Check spelling Alt+F7
    1. Cài từ điển.
    Các bạn tải file vi.rar mình đính kèm ở post này, giải nén ra sẽ được thư mục "vi". Chép thư mục này vào thư mục dictionaries của calibre.
    * Nguồn từ điển: Vui lòng đăng nhập hoặc đăng ký để xem link
    Mã:
    ..\Calibre\Calibre\app\resources\dictionaries
    [​IMG]

    2. Cách dùng Check spelling Alt+F7
    Muốn sử dụng chức năng Check spelling các bạn phải khai báo ngôn ngữ cho ebook, lúc tạo 1 ebook mới editor đã bắt buộc người dùng chọn một ngôn ngữ chung cho toàn ebook, và được khai báo tại thẻ <html> với thuộc tính lang. Các bạn có thể khai báo lại nếu chưa đúng, hoặc chưa có.
    • Tiếng Việt: lang="vi"
    • Tiếng Anh: lang="en"
    Nếu ngoài ngôn ngữ chung là tiếng Việt còn có tiếng Anh thì các bạn có thể khai thuộc tính lang cho thẻ <p> nếu cả đoạn đều là tiếng Anh, cho thẻ <span> nếu là 1 từ hoặc 1 cụm từ.
    Bên dưới là một số ảnh minh họa:
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     

    Các file đính kèm:

    • rar
      vi.rar
      Kích thước:
      13.1 KB
      Đọc:
      204
    Chỉnh sửa cuối: 26/9/17
    tducchau, vinaguy, Miacis and 6 others like this.
  8. inno14

    inno14 Lớp 8

    Phần thêm 1/10/2017: Thu gom các nội dung chú thích không đồng dạng và nằm rải rác ở nhiều html.
    Text mình làm thì chú thích sẽ theo cú pháp của mình rồi, nhưng khi sưu tầm text thì các chú thích sẽ theo ý của người soạn, theo kinh nghiệm sưu tầm text của mình thì có 2 dạng chú thích thường được mọi người sử dụng là đánh chỉ số chú thích hoặc đánh dấu sao và nội dung chú thích nằm riêng ở 1 dòng gần đó nên mình viết cái code gom luôn 1 lần 2 loại cho gọn :D
    Chúng ta sử dụng chế độ tìm kiếm Regex function / All text file / Replace all. Sau khi chạy lệnh sẽ xuất hiện 1 hộp thoại chứa các chú thích + địa chỉ của chúng. Bên dưới là code regex function và các ảnh minh họa.
    Cú pháp ô Find:
    Mã:
    (<p>\(\*{1,}\).*?</p>|<p>\[\d+\].*?</p>)
    Nhấp create/edit dán đoạn code bên dưới và đặt cho nó 1 cái tên nhé
    Mã:
    #Find: (<p>\(\*{1,}\).*?</p>|<p>\[\d+\].*?</p>)
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        f=file_name
        note=match.group(1)+f
        print(note)
        return ''
    replace.file_order = 'spine'
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     
  9. NQK

    NQK Lớp 10

    Hì, phí sức. Kền kền thì không đi săn.

    Sent from my ONEPLUS A3000 using Tapatalk
     
    tducchau and tran ngoc anh like this.
  10. inno14

    inno14 Lớp 8

    Hihi, em viết nhật ký nghiên cứu calibre của em đấy, sẵn tiện post câu like lên lớp luôn :D
     
    tducchau, zodngok and Ngo Ha Quyen like this.
  11. inno14

    inno14 Lớp 8

    Phần thêm ngày 04/10/2017: Tạo nhanh nội dung jacket bằng Regex function.
    • Các bạn click vào nút tạo file mới và đặt tên là jacket.html sau đó lôi nó lên đầu trang.
    • Nhập chữ jacket vào phần nội dung.
    • Chuyển chế độ tìm kiếm sang Regex function
    • Cú pháp ô Find: (jacket)
    • Ô function: nhấp create/edit để tạo function cho lần chạy đầu tiên. Các bạn copy đoạn code bên dưới dán vào hộp thoại và đặt cho nó cái tên (sau này không cần dán nữa, chỉ cần chọn cái tên này thôi).
    • Nhập các thông tin vào nơi phù hợp vào giữa cặp dấu nháy đơn ở đầu code (Title và author không cần nhập do đã khai báo ngay từ đầu tạo ebook). Ok và Replace all
    • Code
    Mã:
    #Tạo 1 html với tên jacket.html để ở đầu ebook.
    #Gõ chữ jacket vào phần nội dung html.
    #Điền thêm tên người dịch, tên của bạn, tên trang xuất bản ebook vào các mục phù hợp giữa 2 dấu nháy đơn.
    #Find: (jacket) và Replace all
    import datetime
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        title=metadata.title
        author='Tác giả: '+metadata.authors[0]
        trans='Người dịch: '+'tên dịch giả'
        publisher='Người tạo ebook: '+'tên của bạn'
        pubdate='Ngày hoàn thành: '+'{:%d/%m/%Y}'.format(datetime.date.today())
        footer='trang ebook của bạn'
        jacket='''
    <style>
    body {
    font-family: serif, bookerly;
    }
    .cbj_banner {
        background: #eee;
        color: black;
        border: thin solid black;
        margin: 1em;
        padding: 1em;
        border-radius:8px;
        }
    /*
    **    Title
    */
    table.cbj_header td.cbj_title {
        font-size: 1.5em;
        font-style: italic;
        text-align: center;
    }
    /*
    **    Author
    */
    table.cbj_header td.cbj_author {
        text-align: center;
    }
    /*
    **    Publisher/published
    */
    table.cbj_header td.cbj_pubdata {
        text-align: center;
    }
    /*
    **    Table containing Rating and Tags
    */
    table.cbj_header {
        width: 100%;
        }
    /*
    **    General formatting for banner labels
    */
    table.cbj_header td.cbj_label {
        font-family: sans-serif;
        text-align: right;
        width: 33%;
        }
    /*
    **    General formatting for banner content
    */
    table.cbj_header td.cbj_content {
        font-family: sans-serif;
        text-align: left;
        width:67%;
        }
    /*
    ** Metadata divider
    */
    hr.metadata_divider {
        width:90%;
        margin-left:5%;
        border-top: solid white 0px;
        border-right: solid white 0px;
        border-bottom: solid black 1px;
        border-left: solid white 0px;
        }
    /*
    **    To skip a banner item (Series|Published|Rating|Tags),
    **    edit the appropriate CSS rule below.
    */
    table.cbj_header tr.cbj_series {
        /* Uncomment the next line to remove 'Series' from banner section */
        /* display:none; */
        }
    table.cbj_header tr.cbj_pubdata {
        /* Uncomment the next line to remove 'Published (year of publication)' from banner section */
        /* display:none; */
        }
    
    hr {
        /* This rule controls formatting for any hr elements contained in the jacket */
        border-top: 0px solid white;
        border-right: 0px solid white;
        border-bottom: 2px solid black;
        border-left: 0px solid white;
        margin-left: 10%;
        width: 80%;
        }
    .cbj_footer {
        font-family: sans-serif;
        font-size: 0.8em;
        margin-top: 8px;
        text-align: center;
        }
    .cbj_comments {
        font-family: sans-serif;
        }
    </style>
            <div class="cbj_banner">
                <table class="cbj_header">
                    <tbody><tr>
                        <td class="cbj_title" colspan="2">'''+title+'''</td>
                    </tr>
                    <tr>
                        <td class="cbj_author" colspan="2">'''+author+''' | '''+trans+'''</td>
                    </tr>
                    <tr>
                        <td class="cbj_pubdata" colspan="2">'''+publisher+'''</td>
                    </tr>
    <tr>
                        <td class="cbj_pubdata" colspan="2">'''+pubdate+'''</td>
                    </tr>           
                    <tr>
                        <td class="cbj_author" colspan="2"><hr class="metadata_divider"/></td>
                    </tr>
                </tbody></table>
                <div class="cbj_footer">'''+footer+'''</div>
            </div>
    '''
        return jacket
    replace.file_order = 'spine'
    • Ảnh minh họa:
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
     
    Chỉnh sửa cuối: 7/10/17
    tducchau, Bọ Cạp and Gassie like this.
  12. Lê Quốc Bảo

    Lê Quốc Bảo Mầm non

    Hay quá, bạn có thể làm thành 1 file hướng dẫn luôn được không?
     
  13. inno14

    inno14 Lớp 8

    Hì, tks bạn đã đọc topic này, mình thích post bài chia sẻ vậy thui hà, mình không làm thành file đâu, bạn thông cảm nha.
     
    zodngok thích bài này.
  14. inno14

    inno14 Lớp 8

    • Thêm một mẫu jacket cho #11
    Mã:
    #Tạo 1 html với tên jacket.html để ở đầu ebook.
    #Gõ chữ jacket vào phần nội dung html.
    #Điền thêm tên người dịch, tên của bạn, tên trang xuất bản ebook vào các mục phù hợp giữa 2 dấu nháy đơn.
    #Find: (jacket) và Replace all
    from calibre.utils.titlecase import titlecase
    import datetime
    def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
        title=titlecase(metadata.title)
        author=metadata.authors[0]
        trans='tên dịch giả'
        mem='tên các thành viên soát lỗi'
        publisher='tên của bạn'
        pubdate='{:%d/%m/%Y}'.format(datetime.date.today())
        footer='trang ebook của bạn'
        jacket='''
    <style>
    body {
    font-family: serif, bookerly;
    }
    .cbj_banner {
        background: #eee;
        color: black;
        border: thin solid black;
        margin: 1em;
        padding: 1em;
        border-radius:8px;
        }
    /*
    **    Coloum1
    */
    table.cbj_header td.cbj_c1 {
        text-align: right;
        padding: 0.2em 0.25em 0.2em 0em;
        width: 50%;
    }
    /*
    **    Colum2
    */
    table.cbj_header td.cbj_c2 {
        text-align: left;
        padding: 0.2m 0em 0.2em 0.25em;
        width: 50%;
        border-bottom: thin solid black;
    }
    
    /*
    **    Table containing Rating and Tags
    */
    table.cbj_header {
        width: 100%;
        }
    /*
    **    General formatting for banner labels
    */
    hr.metadata_divider {
        width:100%;
        border-top: solid white 0px;
        border-right: solid white 0px;
        border-bottom: solid black 1px;
        border-left: solid white 0px;
        }
    .cbj_footer {
        font-family: sans-serif;
        font-size: 0.8em;
        margin-top: 8px;
        text-align: center;
        }
    </style>
            <div class="cbj_banner">
                <table class="cbj_header">
                    <tbody><tr>
                        <td class="cbj_c1">Tác phẩm:</td>
                        <td class="cbj_c2">'''+title+'''</td>
                    </tr>
                    <tr>
                        <td class="cbj_c1">Tác giả:</td>
                        <td class="cbj_c2">'''+author+'''</td>
                    </tr>
                    <tr>
                        <td class="cbj_c1">Người dịch:</td>
                        <td class="cbj_c2">'''+trans+'''</td>
                    </tr>             
                    <tr>
                        <td class="cbj_c1">Thành viên soát lỗi:</td>
                        <td class="cbj_c2" >'''+mem+'''</td>
                    </tr>
                     <tr>
                        <td class="cbj_c1">Người tạo ebook:</td>
                        <td class="cbj_c2" >'''+publisher+'''</td>
                    </tr>
                    <tr>
                        <td class="cbj_c1">Ngày hoàn thành:</td>
                        <td class="cbj_c2">'''+pubdate+'''</td>             
                    </tr>        
                </tbody></table>
                <hr class="metadata_divider"/>
                <div class="cbj_footer">'''+footer+'''</div>
            </div>
    '''
        return jacket
    replace.file_order = 'spine'
    • Ảnh minh họa:
    [​IMG]
     
    Chỉnh sửa cuối: 7/10/17
    tducchau, zodngok, nikanguyen and 5 others like this.
  15. maiminh06

    maiminh06 Mầm non

    Quá hay và chi tiết.
    Mặc dù mình chưa dùng đến nhưng vẫn muốn
    Cảm ơn bạn Inno 14 đã bỏ công sức viết bài này.
     
    inno14 thích bài này.
  16. Gassie

    Gassie Sinh viên năm I

    IMG_6397.JPG
    @inno14 ơi. Sao cùng một cái code jacket mà trong hai cuốn nó lại hiển thị khác nhau nhỉ? Đọc trên calibre, play book thì vẫn ok, cái này tui mở trên edge check thử thì thấy khác.
     
  17. inno14

    inno14 Lớp 8

    cái bên phải 2 cột, cái bên trái 1 cột, khác nhau mà :)
     
  18. Gassie

    Gassie Sinh viên năm I

    Không! Ý tui là hai cái đó đều là một code giống nhau mà nó hiển thị khác nhau á
     
  19. inno14

    inno14 Lớp 8

    Vậy à, gas xem lại phần css xem có giống nhau hông, mình vừa xem cuốn hoa hồng máu trên chrome thì vẫn đúng ý đồ của gass mà. Đoạn code css nào không dùng thì cho calibre chạy lệnh remove hết cho gọn thử xem
    [​IMG]
     
    quyen_pq thích bài này.
  20. Gassie

    Gassie Sinh viên năm I

    Không biết lỗi do đâu. Tại hai cái đó tui đều chạy cùng một code Regex function. Chỉ là cái file hồi trước làm thì không bị gì, còn cái file mới thì lại thấy lệch qua bên.
     

Chia sẻ trang này