用自己的gitbook的template去发布
make deploy
结果其中的epub生成报错:
。。。 Ignoring CSS rule with invalid selector: u'input[type=search]::-webkit-search-decoration' (The pseudo-class :-webkit-search-decoration is not supported) Ignoring CSS rule with invalid selector: u'pre[class*="language-"]::selection' (The pseudo-class :selection is not supported) Ignoring CSS rule with invalid selector: u'pre[class*="language-"] ::selection' (The pseudo-class :selection is not supported) Ignoring CSS rule with invalid selector: u'code[class*="language-"]::selection' (The pseudo-class :selection is not supported) Ignoring CSS rule with invalid selector: u'code[class*="language-"] ::selection' (The pseudo-class :selection is not supported) Source base font size is 10.20000pt Removing fake margins... Cleaning up manifest... Trimming unused files from manifest... Creating EPUB Output... 67% Running EPUB Output plugin Rescaling image from 2340x1080 to 1586x732 anheijuexing_announcement_popop.jpg Rescaling image from 2340x1080 to 1586x732 anheijuexing_first_charge.jpg Splitting markup on page breaks and flow limits, if any... Looking for large trees in pillow.html... No large trees found Looking for large trees in baidu_ocr.html... Found large tree #0 Python function terminated unexpectedly: Could not find reasonable point at which to split: baidu_ocr.html Sub-tree size: 302 KB Traceback (most recent call last): File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py", line 187, in main return run_entry_point() File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py", line 121, in run_entry_point return getattr(pmod, func)() File "site-packages/calibre/ebooks/conversion/cli.py", line 401, in main File "site-packages/calibre/ebooks/conversion/plumber.py", line 1275, in run File "site-packages/calibre/ebooks/conversion/plugins/epub_output.py", line 207, in convert File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 66, in __call__ File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 76, in split_item File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 224, in __init__ File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 372, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 372, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 372, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 372, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 357, in split_to_size File "site-packages/calibre/ebooks/oeb/transforms/split.py", line 350, in split_to_size calibre.ebooks.oeb.transforms.split.SplitError: Could not find reasonable point at which to split: baidu_ocr.html Sub-tree size: 302 KB make: *** [epub] Error 1
导致无法继续。
去看看什么原因或情况
如果实在无法解决,就暂时放弃此单个book的epub格式。
毕竟其他几十本的book都没有这个问题。
calibre.ebooks.oeb.transforms.split.SplitError: Could not find reasonable point at which to split: baidu_ocr.html Sub-tree size
2015年就有人报告此错误了?
好像是:
此处刚增加的百度OCR的章节,代码太长导致报错了?
That error indicates the input file contains some large block of
unstructured text. You can work around it by increasing the split size
int he epub output section of the conversion dialog, but be aware that
the resulting epub file might not work on some older e-ink devices.
那去找找,如何设置和增加epub转换时设置更大的split size?
ebook-convert book.mobi book.epub --flow-size 1000000
去参考此处,先确定此处的:302KB
给个更大的值,比如1MB=1073741824
去看看ebook-convert有哪些参数
~ ebook-convert --help Usage: ebook-convert input_file output_file [options] Convert an e-book from one format to another. input_file is the input and output_file is the output. Both must be specified as the first two arguments to the command. The output e-book format is guessed from the file extension of output_file. output_file can also be of the special format .EXT where EXT is the output file extension. In this case, the name of the output file is derived from the name of the input file. Note that the filenames must not start with a hyphen. Finally, if output_file has no extension, then it is treated as a directory and an "open e-book" (OEB) consisting of HTML files is written to that directory. These files are the files that would normally have been passed to the output plugin. After specifying the input and output file you can customize the conversion by specifying various options. The available options depend on the input and output file types. To get help on them specify the input and output file and then use the -h option. For full documentation of the conversion system see https://manual.calibre-ebook.com/conversion.html Whenever you pass arguments to ebook-convert that have spaces in them, enclose the arguments in quotation marks. For example: "/some path/with spaces" Options: --version show program's version number and exit -h, --help show this help message and exit --list-recipes List builtin recipe names. You can create an e-book from a builtin recipe like this: ebook-convert "Recipe Name.recipe" output.epub
->竟然没有options的介绍
‘flow_size’: 260,
‘flow_size’: 260,
class FlowSplitter(object): 'The actual splitting logic' def __init__(self, item, page_breaks, page_break_ids, max_flow_size, oeb, opts): 。。。 self.max_flow_size = max_flow_size
ebook-convert options
--flow-size Split all HTML files larger than this size (in KB). This is necessary as most EPUB readers cannot handle large file sizes. The default of 260KB is the size required for Adobe Digital Editions. Set to 0 to disable size based splitting.
默认是260KB
-》此处巧了,超过了,是302KB
-》所以可以改为:512KB
ebook-convert book.mobi book.epub --flow-size 512
去试试
此处没有直接用欧诺个ebook-convert,而是gitbook:
/Users/xxx/dev/crifan/gitbook/gitbook_template/common/gitbook_makefile.mk
GITBOOK_COMMON_FLAGS= --log debug ## Generate ePub file epub: sync_content clean_epub create_folder_epub @echo ================================================================================ @echo Generate ePub for $(BOOK_NAME) gitbook epub $(CURRENT_DIR) $(EPUB_FULLNAME) $(GITBOOK_COMMON_FLAGS)
-》感觉是:可以单独给epub后面加上参数?
去试试
gitbook epub $(CURRENT_DIR) $(EPUB_FULLNAME) $(GITBOOK_COMMON_FLAGS) --flow-size 512
结果:
log
Generate ePub for python_common_code_snippet gitbook epub /Users/xxx/dev/crifan/gitbook/gitbook_template/books/python_common_code_snippet /Users/xxx/dev/crifan/gitbook/gitbook_template/generated/books/python_common_code_snippet/release/python_common_code_snippet/epub/python_common_code_snippet.epub --log debug --flow-size 512 。。。 debug: Splitting markup on page breaks and flow limits, if any... debug: Looking for large trees in pillow.html... debug: No large trees found debug: Looking for large trees in baidu_ocr.html... debug: Found large tree #0 debug: Python function terminated unexpectedly: Could not find reasonable point at which to split: baidu_ocr.html Sub-tree size: 302 KB
错误依旧。
看来是参数没有从gitbook传递进去
去看看gitbook是否有其他机制允许参数传递进入ebook-convert
gitbook --help Usage: gitbook [options] [command] Options: -v, --gitbook [version] specify GitBook version to use -d, --debug enable verbose error -V, --version Display running versions of gitbook and gitbook-cli -h, --help output usage information Commands: ls List versions installed locally current Display currently activated version ls-remote List remote versions available for install fetch [version] Download and install a <version> alias [folder] [version] Set an alias named <version> pointing to <folder> uninstall [version] Uninstall a version update [tag] Update to the latest version of GitBook help List commands for GitBook * run a command with a specific gitbook version
没有。
去试试:
gitbook epub --help info: 24 plugins are installed info: 19 explicitly listed info: loading plugin "anchors"… OK 。。。
结果不是输出help,而是直接编译了。。。
xxx@xxx ~ which gitbook /usr/local/bin/gitbook xxx@xx ~ open /usr/local/bin/
打开看到是
gitbook是个软链接
以及内部是个js
~ ll /usr/local/bin/gitbook lrwxr-xr-x 1 xxx admin 46B 3 17 09:21 /usr/local/bin/gitbook -> ../lib/node_modules/gitbook-cli/bin/gitbook.js
和:
~ ll /usr/local/lib/node_modules/gitbook-cli total 24 -rw-r--r-- 1 xxx admin 2.0K 7 11 2017 README.md -rw-r--r-- 1 xxx admin 580B 7 11 2017 appveyor.yml drwxr-xr-x 3 xxx admin 96B 3 17 09:21 bin drwxr-xr-x 8 xxx admin 256B 3 17 09:21 lib drwxr-xr-x 21 xxx admin 672B 3 17 09:21 node_modules -rw-r--r-- 1 xxx admin 1.9K 3 17 09:21 package.json drwxr-xr-x 6 xxx admin 192B 3 17 09:21 test
另外去尝试看看js,能否加上参数
用VSCode打开了:
/usr/local/lib/node_modules/gitbook-cli
但是里面找不到
ebook-convert
或
ebook
去找epub,也找不到。
本来想去看看:
ll ~/.gitbook total 0 drwxr-xr-x 3 xxx 1748468295 96B 3 17 09:22 versions
是否有什么配置的。
结果发现是个文件夹:
cat ~/.gitbook/versions cat: /Users/xxx/.gitbook/versions: Is a directory ~ cat ~/.gitbook/versions/3.2.3/AUTHORS.md AUTHORS.md LICENSE appveyor.yml book.js lib/ package.json testing/ CHANGES.md README.md bin/ docs/ node_modules/ preview.png
所以也去打开看看
open ~/.gitbook/versions/3.2.3
用VSCode打开
是可以找到的
ebook-convert
的
/Users/xxx/.gitbook/versions/3.2.3/lib/output/ebook/getConvertOptions.js
也看到调试期间log对应源码了:
return Promise() .then(function() { var coverPath = getCoverPath(output); var options = { '--cover': coverPath, '--title': config.getValue('title'), '--comments': config.getValue('description'), '--isbn': config.getValue('isbn'), '--authors': config.getValue('author'), '--language': book.getLanguage() || config.getValue('language'), '--book-producer': 'GitBook', '--publisher': 'GitBook', '--chapter': 'descendant-or-self::*[contains(concat(\' \', normalize-space(@class), \' \'), \' book-chapter \')]', '--level1-toc': 'descendant-or-self::*[contains(concat(\' \', normalize-space(@class), \' \'), \' book-chapter-1 \')]', '--level2-toc': 'descendant-or-self::*[contains(concat(\' \', normalize-space(@class), \' \'), \' book-chapter-2 \')]', '--level3-toc': 'descendant-or-self::*[contains(concat(\' \', normalize-space(@class), \' \'), \' book-chapter-3 \')]', '--max-levels': '1', '--no-chapters-in-toc': true, '--breadth-first': true, '--dont-split-on-page-breaks': format === 'epub'? true : undefined };
感觉可以去加上参数了。
找找加到哪里。
/Users/xxx/.gitbook/versions/3.2.3/lib/output/ebook/getConvertOptions.js
return Promise() .then(function() { var coverPath = getCoverPath(output); var options = { 。。。 '--dont-split-on-page-breaks': format === 'epub'? true : undefined }; if (format === 'epub') { options["--flow-size"] = '512' // default 260KB, change to 512KB to allow bigger content }
去运行试试效果
去调试:
make epub
看到输出中有:
debug: calling hook "page" debug: calling hook "finish:before" debug: Conversion options changed from defaults: publisher: u'GitBook' authors: u'Crifan Li <xxx>' debug: flow_size: 512.0 language: u'zh-hans'
说明参数加对地方了
debug: Looking for large trees in baidu_ocr.html... debug: No large trees found
就没有报错了。
然后再回去
make deploy
结果:也就正常了:
【总结】
此处自己的gitbook中去make deploy,内部调用了gitbook命令去生成epub文件,结果期间报错:
Looking for large trees in baidu_ocr.html... Found large tree #0 Python function terminated unexpectedly: Could not find reasonable point at which to split: baidu_ocr.html Sub-tree size: 302 KB
原因:此处要生成的baidu_ocr.html的大小是302KB,超过了默认的260KB的split size
注:260KB的split的size是Adobe的pdf的默认配置。
解决办法:给ebook-convert添加参数增加此值,比如增大到512KB
ebook-convert book.mobi book.epub --flow-size 512
特殊:
此处用的是gitbook,其内部调用到ebook-convert,没有办法直接传入此ebook-convert的参数
所以只能找到gitbook的源码
gitbook安装目录中的lib/output/ebook/getConvertOptions.js
此处是:
/Users/xxx/.gitbook/versions/3.2.3/lib/output/ebook/getConvertOptions.js
给getConvertOptions中添加:
if (format === 'epub') { options["--flow-size"] = '512' // default 260KB, change to 512KB to allow bigger content }
如图:
即可。
之后gitbook即可用到此参数
其中(加了debug后)输出log中会看到
debug: flow_size: 512.0
后续:
debug: Looking for large trees in baidu_ocr.html... debug: No large trees found
就不会报超过大小限制的错了。
转载请注明:在路上 » 【已解决】crifan的gitbook的模板make deploy出错:Could not find reasonable point at which to split Sub-tree size KB