经过一年的工作作为软件工程师,我想让我的梦想成真,所以我辞掉了我的办公桌工作,将我的生命冒险来到世界各地。我赌博是,我能够在享受我梦寐以求的生活时携带微薄的生活。在从阿拉斯加到阿根廷到阿根廷的17个国家驾驶40,000英里,然后在非洲周围的35个国家,我学到了,看到了比我梦寐以求的更多国家。五年的全球冒险意味着我足够的故事和经验教训来填补多个卷,我决定我想做的。我不希望带领出版商的麻烦和所有这些都与之相同的人,所以我走了自我出版的路线,成为一个全新的冒险。
在这篇文章中,我将贯穿有关人员的所有细节,以期最终回顾我的想法,了解我的决定如何解决。给定我曾经划线代码,我将包括很多代码样本,用于实现您可以使用的目标。这篇文章并非打算教你乳胶的Nitty-Gritty细节,而是提供高(ISH)级别的概述我解决的技术堆栈。
确实是的。亚马逊的服务Kindle直接出版使整个过程自我发布大多数,比大多数人实现更容易。实质上,您只需上传您的书籍内部的PDF和包含前线和amp的PDF;后盖和脊椎,在几天内,这本书将出售,您可以订购自己的真实界限。只需勉强任何额外的工作,您也可以提交行业标准.EPUB文件,您的书也将以侵权者数量销售。很难描述在顶部用你的名字拿着发布的书的感觉,尽管我明显地记得“圣洁的**,这是一本真实的书!”
这一切都取决于你。内容,格式化,布局,拼写检查和字面意思在您的直接控制下。
您可以发布您想要的任何内容。也许你一直想写一本关于你猫的毛球的大小的书,你的设计和建造或简单你的日记条目的漂亮灯光键盘。你可以,没有人会阻止你。
你不在前面支付单一的费用,因为整件事是“按需打印”。当有人订购一本书时,亚马逊打印它,然后将其发送给该客户。您不必预先购买500或50,000份副本,并让他们坐在架子上收集灰尘,同时您强调销售它们以获得退款。如果这本书从不销售单一副本,你什么都不付钱。 (但是您可以自己订购一些副本给您的家人)如果在这本书销售时,亚马逊每月处理一切并将资金存入您的银行账户。
在原因内,您可以设置自己的价格(并因此获利)。根据您的书写尺寸,颜色或黑白,页数和其他一些东西的选择,亚马逊计算打印和发送给客户的成本。您可以选择高于您选择销售本书的成本价格,从而定义每次销售利润。您可以在此玩亚马逊的计算器,以查看给定账簿大小/类型的成本。
这一切都取决于你。内容,格式化,布局,拼写检查和字面意思在您的直接控制下。
如果我要自我发布一本书,我希望它可以看起来尽可能专业。虽然可以使用MS Word来生成书籍内部的PDF,但我个人认为结果是自制的,我可以发现那些书一英里。
我想从相同的源文件生成打印簿的PDF和.Epub文件。作为一个开发人员,没有什么比来回复制粘贴,没有办法,我无法忍受不得不修复拼写错误或在多个地方进行编辑。我想在一个地方编辑书籍内容并从中生成两个不同的输出。
必须自动化的整个过程 - 希望只需单击或密钥库,我会生成完成的PDF和完全符合的.Epub文件,没有手动干预。
经过一堆研究,我重新发现了强大而免费的高质量排版语言乳胶,我在大学使用了。我越来越挖掘它,我越是意识到它是一种全吹的编程语言,它肯定会给我我正在寻找的像素完美的布局控制,并且在我最后的努力很少我可以创造一本书看起来像真实的东西一样专业。
阅读我周围遇到了Pandoc,一个免费的开源文件转换器,通常称为瑞士军队的文档转换器。我认为这是一个陷入困境,Pandoc更像是26岁,一半瑞士军刀粘在一起,这真是太棒了。如果您需要转换<文件格式a> <文件格式b>,Pandoc有你的背部。
所以我决定在乳胶中写下这本书,它会产生打印就绪的pdf,然后通过pandoc运行原始乳胶文件,为电子副本生成一个行业标准的.pub文件。这听起来比它更容易,但并不是那么糟糕。
注意:我当然可以使用Markdown或许多其他文档格式之一,因为我毕业于2004年以来,虽然我认真怀疑他们可以提供乳胶的控制水平和我所达到的专业级布局。 (我稍后会更详细地进行详细信息)
使用极其有用的“创建空间”乳胶软件包(在此找到),它足以获得裸骨预订并运行,即在边距和排水仪和页面大小方面是“亚马逊兼正的”。我创建了一个名为“道路选择ME - 卷2.TEX”的文件,看起来像:
第3行为创建空间包提供了书上的详细信息。 (注意:Kindle Direct Publishing(KDP)之前被称为CreateSpace,现在这两个术语更加有或更可互换)
“口袋”意味着它的大小为5.25“x 8”(有许多尺寸可供选择,称为“修剪尺寸”)
“出血”假意味着内容不会延伸到页面的非常边缘(用于照片/杂志的更多)
“奶油”纸是我选择打印的纸张的颜色(而不是白色)(影响厚度计算)
在我给出的一行中我所需要的所有信息,它需要设置边缘,排水沟和一堆其他东西,如果我违反了任何KDP的规则,它甚至会提供警告。例如,您认为如18的警告是因为这个微小的示例簿的长度仅为18页,而KDP则至少需要25页。如果我指定了在给定页面数量的KDP外部强制性最低限度之外的自定义排水沟,我会得到类似的警告。漂亮。 (如果我感受到需要,我可以确定定制边距和排水沟和其他值)
第12行和14行包括我的书的单独章节。作为一个开发人员,我希望在单独的源文件中的所有内容,以及一章 - AT-AT-AT-time感觉就像一个非常出色的方法来打破项目。这也意味着当我处于“写作”模式时,我不必处理任何乳胶代码,我只能敲掉文本并信任我在主文件中制作的定义将处理一切。
通过使用Lettrine包,我在每个章节开始时得到一些非常好的丢弃帽,并通过定义自己的章节和副标题,我得到了这个非常整洁的结果(从打印书的PDF):
在与我的主乳胶文件相同的目录中,我写了一个shell脚本来运行pandoc和一点额外的
第3行和第4行只是从上次运行中删除输出,因此我从一个干净的板岩开始。
第6行......好吧,是的,我最好解释一下。 Pandoc从未设计用于在CreateSpace.sty(这是917行的乳胶代码中,我几乎无法解析自己)。如果我们留下了Pandoc期望找到它的地方,Pandoc将尝试解析它并喷出错误和问题。所以简单的解决方案只是为了重命名它,所以Pandoc找不到它,然后后来再次重命名它(第12行)。 Pandoc只是忽略它并在没有问题的情况下继续前进。
第8行实际上调用Pandoc从.tex文档的输入文件(-f)生成.pepub的输出文件(-o)。我还向漂亮的JPG提供Pandoc The -Epub-Cover-Image参数,我使用-epub-metadata,以确保正确的元数据进入最终的.pub。最后我告诉Pandoc生成一个目录(-toc)。
最后在第14行我调用亚马逊的“Kindlegen”程序,将行业标准的.Epub文件转变为专有的Amazon .mobi文件。我发现运行此命令很有帮助,因为如果未正确设置元数据,或者如果在将其上传到KDP时可能会导致问题的任何其他次要故障,则会吐出错误。注意:在写这篇文章时,我刚刚发现了Amazon不再提供/支持“Kindlegen”,而是使用“Kindle Previewer”。我必须调查一下。
所以你有它。我们为平面版本生成了一个打印就绪的PDF文件,以及数字副本的行业标准和验证的。全部完成。
早些时候我说我选择了这个工具链,因为它是非常强大的,并给了我一个关于布局的灵活性,以满足我的强迫性,并使它真正专业。让我们现在进入其中一些。注意:从现在开始,我不会显示完整的代码样本,但描述并展示我迄今为止迄今为止的方式才能实现我的目标。
(注意:我不是乳胶大师,我肯定无法把它缠在我的需求中几乎和我能够抓住Java BookFactoryFactoryFactory。我即将使用一些错误的术语,但希望我能以您可以理解和遵循的方式传达主要观点。)
此外,我从这里做了很多(并且使用上面的etTrine)需要使用乳胶包,这可以被认为是延长,或者具有酷东西的Bits N个布局代码/控件的集合。他们并不总是有最详细的名字,虽然有一些谷歌曲和嘲笑,但弄清楚你需要实现目标的目标并不难。在MacOS上,我正在使用Tex Live Utility来安装和管理乳胶套餐,这使得整个事情变得相当无痛。每当我使用来自乳胶堆栈交换的代码时,我很快就会出现一个丢失的包裹 - 所以然后我使用TEX LIVE安装它,我都很好。至于我向您展示了“Lettrine”封装确实如何冷却掉帽,“标题”包装是为了标题图像对您所喜好的,我会猜测包“multicol”的表现。有群山的包,几乎总是有多种方式来皮肤猫实现你正在寻找的特定布局。花一些时间在tex.stackexchange.com上搜索,看到许多,许多代码样本和答案,这将有助于您实现您正在寻找的。
事实证明,乳胶是更加或更少的全吹的编程语言,因此您可以根据有条件做强大的事情。我意识到有时间我想要的印刷书与电子书的不同结果,所以在我的主文件中“这条路选择了我 - 卷2.tex”我添加了一个称为“eBook”的条件(切换)。切换来自包etoolbox。
我想要在乳胶代码中的任何地方,我可以检查切换是否是真或假的,并根据状态执行不同的事物。在主文件中,我始终留下假,然后在shell脚本中切换它真为false ./makeebook.sh这样
(没有评论我的sed魔法。我写道,当我写道时,我坐在莫桑比克的海滩上,我为此感到骄傲!)
因此,当常规乳胶和pdf2latex运行时,他们将条件视为假,但是当Pandoc运行时,它将条件视为真实,因此在乳胶代码中占用不同的代码路径。是的,Pandoc了解这些切换并正确解析它们。
像所有良好的编程语言一样,LaTex让您定义自己的功能(通常他们被称为宏,但是还有其他名称,具体而言,取决于细节。nevermind)。
让我们说,我想有一个很好的方法来在文本中有一些漂亮的休息,表示某种自然休息。在电子书中(毕竟是HTML)我只需使用水平规则,良好的“ol< hr>标签。但在乳胶中,我想做一些不同的事情,尽管我不想思考这是什么,当我在写一章的流动时,这是什么。
所以我会为我创建一个宏来做,我将使用该电子书有条件在打印就绪PDF和电子书中产生不同的结果。
我会打电话给这个宏“textbreak”,我可以在我这样的章节中调用它
所以它很好,不容易,不会让我从“流动”中。
我必须在我的主文件中定义该宏,“这条路选择了我 - 卷2.tex”,它必须在\ begin {document}和\ mainmatter之间,并且在我使用它之前。我在定义了切换后也有宏定义。我的新宏是使用这样的“\ newcommand”定义的新宏:
因此,通过编写自己的宏并检查条件,我现在在打印就绪pdf和.pub文件中具有略微不同的输出。
我真的不知道它在乳胶土地上被称为什么,但你可以像OO编程一样过载现有的函数(宏)。早些时候我展示了使用“etTrine”包来在每个章节的第一个单词上获得漂亮的下拉帽。同样,我希望输出以两种不同的输出格式略有不同。因此,虽然我只是在每章中用参数称之为“lettrine”,但它实际上调用了我的超载版本的该函数。为此,您可以使用“\ renewommand”,如下所示:
我的功能过载指定必须传递三个参数,并且您将注意到我的超载版本只存在于eBook切换时才存在的宏。所以对于打印就绪的PDF LaTex只使用标准定义,但对于.Epub文件潘多将使用我的超载版本。现在我们获得了一些强大的工具,我期待编程语言!
在另一个极其强大的功能中,可以使用Lua脚本定义虽然Pandoc,但是可以定义一个“逐字”代码。最终的.epub文件只是HTML,所以这就是我选择通过的。我的过载“etTrine”实际上如此,使用CSS风格来实现类似于“储柠檬”掉落的效果。
因此,我的超载速杂志旨在输出在一些基本HTML和之前和之后的基本HTML中包裹的参数2和3是'%%% HTML'。 (如果你是超级好奇的话,参数2和3是所做的单词的实际字母,参数1只是讲述原始的Lettrine包装完全如何格式化它 - 请参阅更高的代码样本)
现在在我的shell脚本中./makeebook.sh,我告诉pandoc在解析时使用lua过滤器,如此
最后文件rawhtmlfilter.lua包含:我无耻地从潘氏举例中复制了,但它基本上说,如果匹配'%%% HTML'的模式,那么只需通过Pandoc作为原始HTML,所以我们得到了结果想要在最后的.pub文件中。
我还使用电子书切换(条件)在eBook版本中包含彩色图像,但仅在打印就绪PDF中仅为黑白图像。这样我可以更直接控制对比度以获得最佳的打印结果。
(注意:不幸的是,亚马逊的KDP服务无法打印一本部分B& W和部分颜色。这是一个全无或多种交易,而且对于我的370本书,所有颜色都将昂贵,所以我必须坚持下去B& W对于所有文本和图像)
我们可以使用这种工具链可以做一些强大的事情,包括解开.Epub文件手头按摩我们如何。一个.pub文件毕竟只是拉链了HTML文档。
正如我早些时候所说,当谈到布局时,我有点强迫,并且完全是如何看待的事情,尽管涉及到.epub文件,我们只需要接受某些限制。我们无法控制字体大小或在可能使用用于阅读我们的书的13百万readers上的页面中断,但我确实进入并更改了一些在HTML有序列表后删除空白行的一些东西,停止版权符号迫使换行力,并确保脚注不在内部< p>标签,在我不想要的那里创造一吨空白行
在...中的一些额外代码./makeebook.sh shell脚本我打开了.epub文件,按摩一些HTML,在自定义主CSS文档中交换,然后将整个东西捆绑在一起。
这样做的代码更加讨厌的sed和perl魔法,所以我会在这里给你一个想法......
我之前提到的是,我觉得鼠标可以通过除其他文档格式的最终布局提供更多的控制和电力。这在打印就绪的PDF中是最引人注目的,成为印刷书。如果您想打印一本书,这里有几个要考虑的分数要考虑
右侧和左手页面的沟槽不一样。由于书籍绑定的方式,每个页面的“内部”都需要不同数量的“空白空间” - 这是在它绑定的书中中间的页面的一侧。出于盒子乳胶照顾,并在左手页面(绑定位于右侧)和右手页面(左侧的位置)上产生不同的浇口的PDF。
使用单行,我定义了所有章节在右侧页面开始。这意味着有时插入空白页面,我真的很喜欢章节之间提供更多空间的方式,以及始终在右手页面上开始章节的一致性。
打印书的目录可以在单行代码中生成,并且它会自动包含所有章节。通过更多的乳胶代码,TOC的确切外观可以为您的内容进行定制
页眉和页脚可以严重定制,并且可以为不同的页面类型定制。以下选择是完全任意的,他们只是我想要的书。你想做什么,就可以做什么。我在To Stuff和Toc之后开始计算页码,然后我将页码添加到右手页面上,但不是在空白页上(仅从章节仅在右侧)而不是章节标题页面。我还在左手页面上添加了本书的标题,但再次在上面的“特殊”页面上。
脚注是精美的方式处理,并在文本中生成一个小型的上标自动递增号,并且在一个小水平线后,脚注的实际正文在相应页面的底部呈现。这些结果可以定制(每章的数字,整个书籍末尾的全部脚注,也是整本书的末尾等)Pandoc与没有额外努力的乳胶脚注,也在电子书中创建可点击的链接,所有外部URL完美地工作。