Overleaf支持Markdown和LaTeX混合写作

对于稍微篇幅长一点的或者经常有公式和参考文献这种编号会变化的内容的写作来说,仅仅使用纯文本(text)的标记语言远远比隐藏了大量格式说明的“所见即所得”的文字编辑器方便。

当然,最成功和万能的是\(\LaTeX\),mediaWiki也很好,HTML也不错,Markdown语法更简单(注意,就算后面三者,实现数学公式的时候还是靠一个叫做MathJax的依赖\(\LaTeX\)语法的软件)。很早以前的WPS其实也是标记语言,后来就跟堕落的Word学习了这种——适用于不想深入一点学习结构化写作和一点点语法的用户,适用于写纯文字的短文章的用户的——所见即所得。结构化写作,先布局整体结构,再来补充细节,是能够启发你的思考的写作方式。任何人都应该优先尝试一下结构化写作,而不是顺着思路往下写。

对于不需要数学公式,但是还是需要参考文献以及结构化写作的用户来说,\(\LaTeX\)可能学习成本太高,也不太有必要。那是不是可以用Markdown来写书呢?这是可以的,例如“简书”和”Gitbook”就是一个可以用Markdown写书的网站。但是,对于一个团队,可能其中一部分成员已经习惯了用\(\LaTeX\),另一部分习惯用Markdown。怎么办呢?

当然,很早就有人来做三者之间的转换,例如pandoc。不过,很少有软件,并且是在Web端的不需要安装到本地的软件,能够让你直接把其中的两种甚至三种混合起来使用。Web端的软件第一是不用安装维护,第二是方便多人协作,如果还能提供版本管理功能就更好了。

现在,Web端\(\LaTeX\)写作平台Overleaf,就提供了这样一个实现(当然还有待于进一步提高,例如,除了PDF,如果最终能够输出成markdown或者\(\LaTeX\)格式就更好了):通过使用markdown.sty宏包,可以在\(\LaTeX\)中同时使用\(\LaTeX\)和markdown。具体可以参考这里的模板:
https://www.overleaf.com/learn/latex/Articles/How_to_write_in_Markdown_on_Overleaf
https://www.overleaf.com/learn/latex/Articles/Markdown_into_LaTeX_with_Style

合并多个pdf文件

整理一下各种合并多个pdf文件的方法,参考了这些网站(还有忘了的):https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by-latex, https://tex.stackexchange.com/questions/284632/include-multiple-pdf-documents-and-create-bookmark-to-first-page

  1. 用LaTeX来整合(可以添加书签):

  2. \documentclass{article}% or something else
    \usepackage{pdfpages}
    \begin{document}
    \includepdf[pages=-]{paper1}
    \includepdf[pages=-]{paper2}
    \end{document}


    \documentclass{article}
    \usepackage{lipsum,bookmark,pdfpages}
    \begin{document}
    \section{A section}
    \lipsum[1-3]
    \includepdf[link]{1.pdf}
    \includepdf[link]{2.pdf}
    \bookmark[dest={1.pdf.1}]{1.pdf}
    \bookmark[dest={2.pdf.1}]{2.pdf}
    \end{document}

  3. pdftk

  4. $ pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

  5. GhostScript

  6. $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf etc.pdf

  7. PDFJAM

  8. $ pdfjoin foo1.pdf foo2.pdf --outfile bar.pdf

  9. cpdf

  10. cpdf foo1.pdf foo2.pdf -o bar.pdf

  11. PDF-Shuffler (Linux, free software)
  12. LibreOffice(可以小范围编辑pdf文档)

latex to rtf, doc, docx, odt

1. 用latex2html可以把文件先转换成为一个html文件。这个时候可以选择用mathjax格式的数学公式,还是图片格式的数学公式。如果选择图片格式,则latex2html会生成一堆图片。
2. 得到html格式的文档之后,用openoffice打开,就能够转存成为odt,doc, docx等格式。

实际上,第一步也可以通过tex4ht来完成(mk4ht oolatex, 或者,htlatex)。如果用tex4ht来完成,很多的公式默认情况下会保留文字。当然,和latex2html一样,都可以通过参数来控制数学公式的输出,例如变成mathjax、mathml格式。

用latex2rtf也可以直接实现转换latex为rtf(latex2rtf -M12)。

用pandoc原则上也能实现这个功能,不过,公示显示、公式交叉引用、参考文献这些没有上面的几个方案效果好。

注意,上面无论哪个工具,都依赖于ImageMagick的convert。有必要可以通过从源文件编译安装ImageMagick的方式,甚至从源文件安装latex2html的方式,来更新软件。操作系统本身程序库里面包含的相应软件,不一定能够实现这些功能。

latex索引格式语法

一本书的引文、人名和专有名词索引是非常重要的,能够给读者提供很多帮助。在Latex里面,引文比较简单,用bib文件和\cite命令就可以自动完成。索引稍微麻烦一点。

首先,需要一个索引列表,类似下面的定义的每一个人名或者专有名词。

\newglossaryentry{name:Newton}{type=name, name=Newton, text=Newton, description={Isaac Newton(牛顿)}, sort=Newton}
\newglossaryentry{term:经典力学}{type=term, name=经典力学, text=经典力学, description=Classical Mechanics, sort=JingDianLiXue}
\newglossaryentry{term:Newton力学}{type=term, name=Newton力学,text=Newton力学, description=以Newton第二定律为核心的力学, sort=Newton力学, parent=term:经典力学}

其次,需要在正文中功过\gls{name:Newton}使用这些索引项。

接着,只要在Latex的声明部分做过如下的说明,在系统运行下面的命令之后,就会自动产生高质量的索引。

\usepackage[nomain,acronym,xindy,toc, style=alttreehypergroup,nolong,nosuper]{glossaries}
% The alttree type of glossary styles need to know the
% widest entry name for each level
\glssetwidest{term:Lagrangian方程} % level 0 widest name,找出来你的列表中最长(0级索引项)的名字,这样系统好对齐
\glssetwidest[1]{term:Lagrangian方程} % level 1 widest name,找出来你的列表中最长(1级索引项)的名字
\glssetwidest[2]{term:Lagrangian方程} % level 2 widest name,找出来你的列表中最长(2级索引项)的名字

\usepackage[xindy]{imakeidx}
\usepackage{listings}
\newglossary[tm]{term}{term}{te}{名词索引}
\newglossary[nm]{name}{name}{na}{人名与常用翻译}
\makeglossaries

编译阶段,在xelatex 文件名以及bibtex 文件名之间,加入运行一个makeglossaries 文件名,就会自动的到索引。为了索引格式正确,需要多次运行xelatex 文件名 这个命令。

万能格式转换器pandoc用于书稿格式转换

一直打算把我的latex格式的书稿变成markdown格式和mediawiki格式,或者html格式。原来latex2html可用,不过遇到中文,会出很多问题。现在终于找到了pandoc万能格式转换器。太牛了,基本上转换了以后是可读的,需要额外修改的工作量不是很大。

按照pandoc的介绍,它能够把Markdown, reStructuredText, textile, HTML, DocBook, LaTeX, MediaWiki markup, TWiki markup, TikiWiki markup, Creole 1.0, Vimwiki markup, OPML, Emacs Org-Mode, Emacs Muse, txt2tags, Microsoft Word docx, LibreOffice ODT, EPUB 和 Haddock markup 转化成HTML, Word,Ebooks,TeX家族,PDF。实在太强大了。