如何使用LaTeX让自己不乱?
虽然说LaTeX声称排版容易,只关注内容,可是混合着源代码的结构很难让我只关注内容,最后看得眼睛疼,找什么都找不到。
选择有折叠功能 (folding) 的编辑软件,把无关内容隐藏。大项目分多个文件,主文件只管结构,各章节内容及复杂作图分别另立文件,由 input 和 include 导入。
网上下载或问别人借的模版不要直接用。见过手动加粗居中来做章节标题的,见过希腊字母用英文字母 define 的,把 LaTeX 当 Word 用,不乱才怪。
养成良好的换行 (不是分段) 、制表、空格和缩进习惯,像编程一样。长公式不要混在文本中间。随手加标签,标签名有体系可循。编辑时善用搜索功能定位。
但其實,LaTeX 是用來排版的,不是用來寫作的。
一個解決方案是:除了數學公式,別用 LeTeX 句法寫作,改用 Markdown 或 Markdown 的擴展。
如果不是專業排版師(有這個職業麼?),只想關注內容,儘量少關注格式、宏包、排版,我所知道最合理的方式是使用 pandoc 寫作,然後輸出 PDF(中間也可以轉成 tex 文檔調試)。
Pandoc 的作者是伯克利哲學系的John MacFarlane,這個工具能在數十種格式之間轉換。Pandoc 主頁那個很誇張的圖就展示這種轉換關係。所以,我們可以選擇最簡單的格式來寫作,比如 markdown,然後轉化成我們想要輸出的結果,比如 tex,甚至直接轉成 PDF 文檔或Beamer 文檔。
Pandoc 依然在進化中,就這一年版本更進的思路來看,最終是想讓用戶直接跳過tex這一步,一步轉化成 PDF 文檔。現在短文檔(筆記、作業、講義等)基本可以直接轉化,如果要實現更複雜的功能(比如參考文獻的文檔內跳躍鏈接),轉換成 tex 文檔之後也就是再按個按鈕的工作量。與 Pandoc 相關的生態也發育良好,好些編輯器只需簡單配置,就能馬上上手。
Pandoc 提供了加強版的 markdown 語法,所以要寫帶有圖表、引用、數學公式、參考文獻、目錄的文章時,直接用 pandoc 寫作更方便,而且不用考慮代碼摺疊,不用考慮拆成十幾塊短文檔。
這是一個 pandoc 的 markdown 語法中文翻譯,不妨花幾分鐘閱讀:Pandoc’s Markdown 語法中文翻譯。
使用 pandoc,寫作和輸出可以分兩步:
1. 寫作文檔。例如,這是 pandoc 的整個使用說明,用 pandoc 語法寫好:http://johnmacfarlane.net/pandoc/demo/README。可以看到,整個文檔的格式非常簡單,我們直接關注內容。
2. 輸出文檔。在終端輸入相應的轉化命令,得到上面那個文檔的pdf版本:http://johnmacfarlane.net/pandoc/demo/example14.pdf。可以看到,外部超鏈接、內部鏈接、目錄、代碼塊格式、頁眉、腳註、版本號、表格等等一應俱全。
評論中 @张苏 問到編輯器,我之前用Sublime Text 2。但從2014年6月21日開始,我改用 RStudio 作爲編輯器。最新版 RStudio 引入 R Markdown V2,免去在終端輸入 Pandoc 命令。其實,由於終端可以記住之前執行的命令,每次轉換文檔並不繁瑣,只需調出上次的命令,但 R Markdown V2 把“調出終端+回車鍵”兩個步驟簡化爲一個步驟,並簡化了 HTML 和 PDF 輸出的一些設定,還是提高了效率。
簡而言之,現在我們可在 RStudio 編輯器中用 Pandoc 寫作文檔,按一個轉化鍵,輸出 HTML、PDF 或 Word 文檔,並保證豐富的文檔元素:腳註、超鏈接、引用、目錄等。RStudio 的缺點是 PDF 預覽器還不太好用,希望之後的版本能有改進。
初次使用 RStudio 寫作可按以下步驟:
1. 保證電腦上裝有 Tex 套件。Mac 用戶可在MacTeX - TeX Users Group下載一整個
MacTex 套裝(大約2G多)。(Pandoc 作者 John Macfarlane 本來建議安裝 BasicTex(64M),在需要各類 package 時,在終端用`tlmgr`命令下載。不建議這種做法,因爲 BasicTex 實在太簡單,總需要自行安裝許多packages,同時 tlmgr 命令也不是時時都可用的:每當TeX發行版升級時,舊版本會被凍結,tlmgr 命令也沒辦法下載新的 package。)
2. 保證電腦裝有R 3.0以上版本。下載地址:The Comprehensive R Archive Network(小於100M)。
3. 下載安裝最新的 RStudio,地址:Download RStudio。
4. 打開 RStudio,點擊 File--〉New File--〉R Markdown,會彈出一個簡單的 R Markdown 文檔,再按 Knit PDF 就可以經由 TeX 引擎生成相應的 PDF 了。(中文用戶在執行 RStudio 自帶的 R Markdown 文檔時,日期date那行可能會顯示中文,例如“2014年6月21日”,整行刪掉或改成英文日期,就可以順利執行了。)
===
如果熟悉LaTeX語法,可以很快上手。下載pandoc,在Github上找一份LaTeX模板,修改一下,開始用pandoc寫作就可以了。我現在寫筆記、上課的幻燈片、作業、作業答案都是用pandoc寫後輸出pdf文檔,熟練後比用LaTeX寫快許多。
中文世界裏有兩份對pandoc較好的介紹:
1. Markdown写作进阶:Pandoc入门浅谈 ← 阳志平的个人网站::技术
2. 黑魔法利器pandoc
對初學者,兩個歷史學家給出了文科生使用 pandoc 寫作文檔的指南:
1. Sustainable Authorship in Plain Text using Pandoc and Markdown
0. 选一个用得顺手的编辑器。语法高亮和代码块折叠应该是两个必备功能。
1. 按章节划分文件,在主文件中引入。这样做的好处有: a) 结构清晰。b) 使用svn做版本控制,多人同时编辑的时候可以避免conflict. c) 更换模板时保持不同版本时只需维护一份正文内容。
2. 需要做特殊处理的地方,尽量不把复杂命令串写在正文中,而是定义成 newcommand. 这样源代码更易读,特别是在表格中包含这些自定义命令的时候。
3. 每个section和subsection都应该有一行注释,说明此处要说的是什么。个人习惯每个(sub)section都是label+注释。
4. 在给段落、表格、图片加标签以便引用的时候,应该有自己统一的风格以便自己区分。个人的习惯是加前缀sec:, tab:, fig:.
5. 在有别人参与修改的时候,应该自定义一些 todo, add, delete, mark等命令。同时应该为这些命令设置一个或几个trigger. 比如设置一个final_print,当这个trigger为true的时候,所有标为delete的段落不会显示,方便迅速预览改动效果。
6. 写作初期不要为浮动元素添加太多的位置限制。这些可以最后微调。
7. 多添加注释,特别是对于不常用的宏包和自定义的命令。
8. 不要乱用硬性的命令,比如vspace. 因为很有可能当你做了一些改动以后,某处距离就不是你上次看到的那样。个人建议只在内容已经完全确定,最后排版微调阶段使用这些距离控制命令。
- 选取好的发行版并使用 IDE,比如 TeX Live + TeXstudio,勤更新。文本编辑器能给的支持太少了,根本不能应付大型文档。TeXstudio 这种 IDE 有代码折叠,语法句法(不只是拼写)检查、inline 预览、代码和PDF间跳转等重要功能。
- 下决心用 LaTeX 了,就不要再使用 LyX、Pandoc 啥的了。那些都是隔靴搔痒,和你用 LaTeX 的初衷相违背,排版强迫症发作起来无药可救。
- 处理中文,请使用 XeLaTeX 引擎和 xeCJK 包,不要碰 CTeX 及古老的 CJK 方案。
- 善于用 \include 切分文档。
- 功能相近的包,选取未停止维护、与引擎兼容且最广受好评的;功能非常丰富的包,如绘图包等,学习最先进的。
- 把 amsmath 包的官方文档啃几遍,有问题上 stackexchange 的 TeX 版找方案。能排公式和排对公式之间的区别是很大的。比如函数该用内置的带\的版本(\cos vs cos),绝对值符号究竟是哪个,\dfrac 和 \tfrac 的区别等等,有的出版社都不知道。
- 学会换行和缩进,\usepackage 可以以字典序排列;包内设置,缩进后字典序排列。例如:
\documentclass[a4paper]{article} \usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
...
\usepackage{tikz}
\usetikzlibrary{arrows}
\usepackage[indentfirst]{xeCJK}
\setCJKmainfont[BoldFont={SimHei}]{SimSun}
\setCJKsansfont{KaiTi} \begin{document}
...
\end{document}
- 遵循最小手动配置原则,尽量不自行定义命令、变量等。杜绝手动几何调整。
- 多看文档(texdoc 调用)和TeX - LaTeX Stack Exchange。
包推荐:
- biber 代替 bibtex
- polyglossia 代替 babel
- xindy 代替 makeindex
- 画图用 TikZ + Asymptote 分工,代替 MetaPost、PSTricks 和 xfig等等其他所有绘图包。
其他的推荐想到后会添加到这里。
DQDG下载_电子书_pdf_图片
蛋疼的时候弄过的两本书,
用 XeTeX 生成 ……
其中某个的入口文件
% 讲导言区内容移动到不同的文件中
% 样式相关
\input{Styles/Default}
% 调用常用功能的支持
\input{Functions/Bases} % 基本
\input{Functions/Fonts} % 字体
\input{Functions/Graphs} % 插图与表格
\input{Functions/Draws} % 图形绘制
\input{Functions/Notes} % 参考文献,注释相关
\input{Functions/Maths} % 数学公式
\input{Functions/Codes} % 插入代码
% \includeonly{Contents/2_Chap_08} % 单一章节生成和排版调试
\begin{document}
% 封面
\include{Contents/0_Cover}
% 前言(摘要)、目录
\include{Contents/1_Intro}
% 各章节
\include{Contents/2_Chap_01}
\include{Contents/2_Chap_02}
\include{Contents/2_Chap_03}
\include{Contents/2_Chap_04}
\include{Contents/2_Chap_05}
\include{Contents/2_Chap_06}
\include{Contents/2_Chap_07}
\include{Contents/2_Chap_08}
\include{Contents/2_Chap_09}
\include{Contents/2_Chap_10}
\include{Contents/2_Chap_11}
\include{Contents/2_Chap_12}
\include{Contents/2_Chap_13}
\include{Contents/2_Chap_14}
\include{Contents/2_Chap_15}
\include{Contents/2_Chap_16}
\include{Contents/2_Chap_17}
% 附录
\begin{appendices}
\input{Styles/Appendix}
\include{Contents/3_End_A}
\include{Contents/3_End_B}
\include{Contents/3_End_C}
\include{Contents/3_End_D}
\include{Contents/3_End_E}
\end{appendices}
\end{document}
文档结构
总之就是把 内容和样式设置 分离就好。
编译器一般用kile或者texmaker,都是免费的,而且也有一些简单的折叠和显示文章结构的功能。
也曾经用过类似于TeXworks之类的编辑器,似乎这类编辑器都带有文档结构表,应该也能很容易地看清文章架构。
如果文章较长、组织结构较复杂的话,可以考虑分成多个子文件来撰写。
或许也可以尝试下用所见即所得的编辑器如LyX来写tex文档,不过我个人不太喜欢这种方式。
笔记/Blog都是用vim+vimwiki写的markdown格式(感谢vimwiki新近支持markdown格式), Blog的话在vim里用wordpress插件直接发布,markdown里几乎可以随意内嵌latex语法,wordpress有很多插件可以支持。笔记的话通过pandoc把markdown转成latex, 再用pdflatex转成pdf。
我觉得关键是结合markdown简洁直白的优势在必要的时候能够嵌入latex复杂丰富的功能
习惯问题。看得多了,代码中也能看出公式来。
还是习惯问题。严格按照某种固定格式,该缩进就缩进,该高亮就高亮。严格限制屏幕中需要处理的信息量,该分章节就分章节。这样,自然就显得整洁,自然有条理。人的瞬时记忆是有限的,对于固定模式更高效,一次处理少量的数据也更快一些。
如果你不是必须用latex,换工具。如果你只是投稿,可以先把文字编辑好,再来用latex整理。
如果你坚持使用latex,就像整理书桌一样整理自己的文字。按照自己的想法去做想做的事,不要被工具所左右。当然,驾驭一个工具,必然有一定的学习曲线,但一旦学成,它就成了你的习惯。
另外,平时写文档,我也推荐pandoc和markdown,既可发布pdf,也可发布网页。现在一些论坛和博客系统(如jekyll)都是支持markdown的。我自己就是用markdown记笔记,然后发到用github建的jekyll博客上。
2. 写注释
3. 理清自己的思路
如何使用LaTeX让自己不乱?的更多相关文章
- LaTeX 相对于 Word 有什么优势?
sjhstone ,本科EE在读 vczh等 276 人赞同 [Word公式进阶请往下翻]有人还写过论文,参见PLOS ONE: An Efficiency Comparison of Documen ...
- Latex学习笔记-序
在写论文的过程中自学了$\LaTeX$, 想总结一下使用心得.刚开始整理了一下发现非常之乱,不知这么多零碎的知识该如何整理的有条理点,至少以后用到还能翻翻自己博客.这次写作论文图省劲用了IEEE的模板 ...
- 最近在 OS-10.9下配置opencv, cgal, latex, qt, pillow
其实我之前使用的Mac os的版本是10.8的雪豹,可是最近想体验一下Mac os10.9新版本,于是就开始更新Mac os,经过10多个小时的下载和成功安装后,发现之前的配置全乱了,首先是发现lat ...
- 教你如何在word中像LaTex那样打出漂亮的数学公式
转载自: http://blog.csdn.net/ibingow/article/details/8613556 记得很久以前在word里打数学公式很痛苦,要用鼠标点啊点,效率奇低,包括像MathT ...
- Latex 论文elsevier,手把手如何用Latex写论文
这几天在开始写论文,准备发的是elsevier,这个网站的instruction有问题,下载的东西基本上好多的错误,所以我就写博客记录. 首先看下:https://www.elsevier.com/a ...
- 2019-2-13-Latex-论文elsevier,手把手如何用Latex写论文
title author date CreateTime categories Latex 论文elsevier,手把手如何用Latex写论文 lindexi 2019-02-13 10:38:20 ...
- latex中显示代码
如何在latex中添加代码模块 首先在开头导入以下的包 \usepackage{listings} \usepackage{ctex} % 用来设置附录中代码的样式 \lstset{ basicsty ...
- Linux 中优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)
这样一个标题可能不太准确,因为确实无法准确地解释什么叫"文本化编辑思想".其实我这篇随笔主要是想探讨 Markdown.LaTeX.MathJax,有兴趣的朋友可以继续往下看,同时 ...
- 再来说说 LaTeX
在我的上一篇随笔中,我提到了 Markdown.LaTeX 和 MathJax.这几个东西对目前的网络技术文章的写作.展示都有深远的影响.在上一篇中,我还给出了一份 LaTeX 语法的学习资料.在这一 ...
随机推荐
- WEP自动破解工具wesside-ng
WEP自动破解工具wesside-ng wesside-ng是aircrack-ng套件提供的一个概念验证工具.该工具可以自动扫描无线网络,发现WEP加密的AP.然后,尝试关联该AP.关联成功后, ...
- SQL语句之 多表管理
SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做 ...
- BZOJ3772精神污染
参见http://blog.csdn.net/popoqqq/article/details/43122821 #include<bits/stdc++.h> using namespac ...
- poj 1797 最短路变形dijkstra
题意:题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量 链接:点我 解题思路:其实这个求最大边可以近似于 ...
- 吴恩达-coursera-机器学习-week7
十二.支持向量机(Support Vector Machines) 12.1 优化目标 12.2 大边界的直观理解 12.3 数学背后的大边界分类(选修) 12.4 核函数1 12.5 核函数2 12 ...
- Ural 2036. Intersect Until You're Sick of It 计算几何
2036. Intersect Until You're Sick of It 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=2036 ...
- Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现
前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...
- CentOS 7解压安装PHP5.6.13
自动化脚本: https://github.com/easonjim/centos-shell/blob/master/php/install-php_5.6.13.sh
- Revit API创建一个拷贝房间内对象布局命令
本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码.这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置.通过本讲座使听众知道创建一个二次开发程序很简单 ...
- Xamarin.Forms.Xaml.XamlParseException: MarkupExtension not found for trans:Translate using a PCL in Release Mode
I'm pretty desperate finding the solution for the problem stated below. I have a cross platform solu ...