0%

正确打开LaTeX的姿势

深夜睡不着开始刷博客看到Stone-Zeng的博客,写的真心很好呀。

然后今天醒来顺藤摸瓜的去看了看原文:$\LaTeX$ 的罪与罚。看了之后,这是何等的心浮气躁之人才能写出的文章。天下之大,放不下一张安静的书桌供你仔细读说明书吗?时间之长,有您写知乎吐槽的时间,看看文档,你提到的80%的问题都会解决。

完全未知的领域不看说明书就开始乱用,这不是Word动动鼠标就解决的。不看说明书就算了,遇到问题宛如无头苍蝇瞎折腾,东一榔头西一棒槌,模板不懂代码不懂就开始瞎改。还是不去看文档,你折腾起来的样子真像那谁。

$\LaTeX$是一门编程语言,在随便挑个编程语言如Python,任何人上手恐怕都会难免遇到错误吧。代码出错的语言不是好语言?不读想文档但我想解决问题,哪个语言能这样?恐怕是自然语言。Java的文档也不在少数吧,但是有人读有人会呀。不读文档,直接用别人代码,出错了就开始搜索,这种毒瘤观念,怕不是你写代码的样子也像那谁。

基础不牢,地动山摇。心浮气躁,邪魔乱道。要么仔细看,要么别看,这么糊弄,很浪费时间的。

我的回答

准备给他讲解$\LaTeX$的正确姿势,看评论区也是普遍:我不想学,我想直接抄,我想$\LaTeX$特别好用,我想要好模板交差,我还是不想学没必要学的态度,罢了罢了。宛如给一个人解释:买菜不用微积分,可为什么所有的大学都要开高等数学这门课一样。眼光不同,视野不同让我咋交流。

我只想说,要不您下次生病吃药也别看说明书了,直接吃吧,挺好的,别管一粒两粒一百粒药丸直接往嘴里塞。吃坏身体然后去怪设计药品的人太菜了设计不出好药,然后写一个知乎:论吃药的罪与罚,然后在评论区大家吃药五分钟,住院两星期的跟风。

不是设计药品的人不懂如何设计药品也没关系,吃药之前仔细看说明书就好了。不是开发者不懂 $\LaTeX$ 内部原理没关系,然而不看说明书就乱用,然后浪费你时间我只想说:真好。$\LaTeX$ 是一门编程语言不是Word,你学任何一门编程语言不都先看书然后一点一点敲代码嘛?写论文的编程语言就不是编程语言了?Word确实不用,要不你还是回Word吧,上手快还没不容易出错。

引用一个图片吧。

如果按你说的。想用一个东西直接百度别人的,出了问题就搜索,不怪自己怪开发者。那么我这种没学过Java的是不是可以说我精通Java,写代码之前直接抄别人的嘛,出了Error,我就去搜索解决嘛,只要遇到问题我也像你一样各种搜索,然后解决不了我也不去看Java经典的书从头学。就说Java的开发者不会开发嘛,搞的太难了,文档写的不好嘛,然后吐槽,再写一个Java的罪与罚是不是?(无意引战Java)。总结为三句话:反正我不会,反正我不学,出了错反正不能怪我,一定是开发者不会开发的问题。

我只想问一下,你生病了吃药之前看不看说明书的。等您下次不看说明书吃坏了再来吐槽一下。

若还是那个观念:我只想用它套模板写论文应付老师应付杂志社,没想学那么多东西。我想你的幼儿园、小学、初中、高中、大学、乃至硕博的老师都没有告诉你不劳而获的道理。$\LaTeX$ 是一门写论文的编程语言,但并不是你套模板且想不劳而获和不读说明书的理由。

Liam-Huang前辈

原文在这里:https://zhuanlan.zhihu.com/p/74815765

其实原文第一次出现在我面前就是 Zeng 在群里推送的。粗粗扫了一眼,唯一的感想就是:「这作者怕不是个友善度吧」。那么为啥咧?

私以为问题出在两个方面。

  • 智能手机时代 App 无需说明文档的熏陶之下,人们已经渐渐失去了「看说明书」的习惯。然后将一切不符合「我认为」的东西,归罪于「这东西不好」。——其实原文作者提出的绝大多数问题,花一个下午好好读读入门文档,都是能解决的。
  • 「我要我要我立即就要,不听不听我才不听」的功利心态。孩子醒醒,免费午餐和「捷径」最终都会害死你。——不限于 $\LaTeX$ 领域,适用于人生各个阶段各个领域。

简而言之,你可以说它有这样那样的问题,不过前提是你以恰当的方式去了解了它。因为它有问题,而尝试掩盖和抹消「你自己」的问题,对这样自欺欺人的行为我们表示遗憾。

李阿玲前辈

原文在这里:https://zhuanlan.zhihu.com/p/74809700

对于$\LaTeX$,无论是用还是玩,这些年其实各种人都见识到了。有就想用这个搞个模版填上文字的。有纯粹是想玩的。有想研究一下排版软件的。

这很正常。或者,甚至可以这样说:凭什么你想做成什么就真会做成什么?!

Knuth的 $\TeX$ 他想了几个月改了几年。Lamport的$\LaTeX$ 也是弄了几年。这两位是图灵奖获得者的。凭什么你一两个小时就弄明白这俩东西?!这简直是对这两个人的智力上的侮辱。这种图灵得主顶级计算机大佬都没弄成您满意的东西,我还真希望您能弄出来,还弄的特别好,没准那年的图灵奖就是您的了,也算是为国争光。

一个人在没遇到一个需要超出自己理解力/智力上限的东西前,总会有一点自我感觉良好。比较之下,更恐怖的事就是:这个世界上,这种事物并不少。当然更恐慌的是,他还是个没有耐心的人。遇到问题没有耐心,使用上没耐心,提问上没耐心,最后想做的就是没做成。

不同的事物,经验不一定可迁移。Word里面点一点图标就能做到的事是不少。但是,很多人忽略了:点一点图标其实也不一定能把某些东西做对。而一旦想把这种经验迁移到$\LaTeX$里,那很可能能做对的事就是少数,做不出效果甚至做错的是多数。

一把钥匙只能开符合这把钥匙的锁。当你碰到不同的锁的时候,就得换钥匙。没有别的办法。

当然,人还要有耐心学习一个未知领域的事物。但是更应该有耐心承认自己的失败。但是,对于很多人来说,承认自己失败这一点太难了,承认自己有错误太难了。成年人的脸皮,比城墙厚,机关枪打不透的啊。

这会造成一个结果:把学不懂的东西认为是这个系统设计的问题。总之,锅不是自己的。挑错点评头头是道,一副专家面孔。

这种认识是一种特别具有直觉性的东西。我也会有,我很多时候也会有这种直觉。但是,直觉毕竟是容易产生误判。所以我自己再觉得XXX不对的时候会尝试证明出来。如果自己证明不出来,那就是自己的直觉有问题。

真正设计的有问题的东西,有。没有设计问题而理解有问题的东西,也有。

然而,对$\TeX$的批评大部分没到点子上,都可以回归为:吃药之前不看说说明书的心浮气躁。甚至可以说,最终级的对$\TeX$的批评,就是实现一个比$\TeX$好用的,排版效果不差,生态圈还大的软件作品。

可惜,现在还没有人做到。我写过一个版本的$\TeX$实现,但是我没什么想法。

或许是,他们很“聪明”,知道自己真做不出来。

Stone-zeng的回答

原文在这里:https://stone-zeng.github.io/2019-07-23-latex-crime-and-punishment/

你们啊,要……还是要提高自己的知识水平!我也给你们着急啊,真的。

这是我使用 $\LaTeX$ 的第三年,踩了很多坑后,我也开始有了对 $\LaTeX$ 的一些感悟。

不巧,这也是我使用 $\LaTeX$ 的第三年(从我 2015 年年底装 CTEX 套装开始算,四年不到),所以我也有「对 $\LaTeX$ 的一些感悟」。

入门之前

在拥挤的办公桌前,面对 doc 文件夹下三千多个 PDF readme,我知道我这辈子都没办法做一个 $\LaTeX$ 科班生。然而,命运不会等人,我手中小小的报告,常常 24h 内就必须要飞到老师的邮箱中。

比较不幸的是,大多数人用 $\LaTeX$ 都是被迫 / 半被迫的:你的老板可能并不会管你会不会用就直接把你逼上梁山,建模比赛别人都用我不用就没奖了(误)。但没有什么办法,24h 内掌握 $\LaTeX$ 就是不现实,至少得匀出几个礼拜到几个月的时间才能上手。既然知道「老板可能要我用一个之前没碰过的工具」,是不是应该提前预留一些学习时间呢?

我也希望自己能做一个弄明白 $\LaTeX$ 的人。然而可惜的是,我或许永远无法将 $\LaTeX$ 看作一个「专业工具」,拿出钻研编译原理的劲儿来啃透 $\LaTeX$。

这或许是因为,在座的你我需要的无非是排个章节、插个图、上下标、来几行公式……我们需要一个能好好地把字母排列到理想位置的「效率软件」,而不是一个慢吞吞又挑三拣四难以融洽的「活祖宗」。

这是很多人的困扰:我就是只要写个文章为什么要把 $\LaTeX$ 搞得这么清楚?此时可以类比如下问题:

  • 我只是写个 C 的 Hello world,怎么还要学命令行、学 Linux、学 Makefile、学 Git……?
  • 我只是学计算机、学数学、学 xxx,为什么要会英语?
  • 我一个理科生为什么要学语文?我一个文科生为什么要学数学?买菜又不用三角函数微积分解析几何……

具体问题具体来说。不管你认不认可,(La)TEX 就是一个完备的编程语言,虽然你需要的可能只是「作为标记语言」的那一个子集。所以,准备上手之前,请务必认清楚自己的身份

  1. 我要按照模版写毕业论文、建模论文、期刊论文

    你需要找一些合适的入门材料,学习基本的语法。有模版请严格按照模版的说明操作,不要根据自己的喜好做任何修改(你的感觉与偏好在这个阶段极有可能是有问题的)。重点请放在文章的内容,而不是文章的格式。出现任何问题请找模版作者,没有必要试图自己解决。

  2. 我要记笔记、出试卷、写书

    同上,请先从入门开始。熟悉基本流程之后再放飞自我,刘海洋的《$\LaTeX$ 入门》可以备在手边随时翻阅。每天读两次《入门》,每次都有新收获。

  3. 我要系统学习排版知识,写模版、写宏包

    你可能确实要拿出「钻研编译原理的劲儿」。排版的水可能比你想象的还深,而 TEX 跟主流编程语言大相径庭也需要一些时间来掌握。Google、GitHub 和 StackExchange 将会是你的好朋友,以及,英语是必须的。

  4. 我要写世界上最好的排版引擎干掉 TEX

    请联系 @李阿玲。(逃

  5. 老板让我干什么我就干什么

    祝好运,不送。

入门教程

知乎上老生常谈的问题,前辈们的回答可以认真读:

当然也可以选择看下面的:

刚入门的头几步将会在很大程度上决定之后的路好不好走。不论是看了谭浩强的 C 语言,还是不知道从哪里找来的 $\LaTeX$ 教程,后果都是出现一堆稀奇古怪的问题,自己还找不到解决方法。所以,我们非常希望新手能够选择一些靠谱、合适的入门教材。

现在(2019 年 7 月),我们只推荐下面这些材料:

  • 一份(不太)简短的 $\LaTeX$ 2ε 介绍(lshort) [PDF] [GitHub]
  • 一份简短的安装 $\LaTeX$ 的介绍 [GitHub]
  • 刘海洋的《$\LaTeX$ 入门》(跳过 CTEX 套装的部分)

lshort 强烈建议完整读一遍,普通文章排版所需要的几乎全部功能这里都包含了。找不到直接去《$\LaTeX$ 入门》的相关章节翻阅(当字典查)。其他网上的资料,wikibook 上的教程可以参考,知乎请认准那几位的回答,b 站鱼龙混杂谨慎使用,而 csdn、科学网博客、x 度文库请绝对不要看

有人带自然很好,但请先判断他的水平。最简单的依据:如果他还在用 CTEX 套装,或 WinEdt 7.0 及以下,或代码里面出现了 CJK 环境,那么请立刻远离(当然,仅限 $\LaTeX$ 方面)。

发行版建议使用最新版 TEX Live(目前是 2019),或者在线使用 OverleafCTEX 套装绝对不要用

最后一点提醒:如果你不小心学了假的 $\LaTeX$,建议回头重读一遍以上列出的入门材料。

如何找模版

为了写出符合学校要求的论文,谁都需要一个好用的模版,而不出意外地,我也是其中的一员。

  • 实验室的算法大神世豪搞了个模板用,折腾折腾,一编译,好使!
  • 我拿来用,不好使,浪费了一两天时间。
  • 实验室编码大神益达用了个模板,折腾折腾,编译一下,好使!
  • 我换成他的,不好使,浪费了一两天时间。
  • 我上 Github 下载了一个的 ZJUthesis
  • 不好使,浪费了两三天吧。
  • 换成另一个 github 上的 zju 模板,不好使。
  • 这时候数学优化大神萝卜给我了一个师兄自用的模板。
  • 我试了一下午,不好使。

怀疑你在黑 zju 然而我找不到证据……

首先,学长 / 学姐 / 大神 / 巨佬拷给你的模版几乎一定是不好用的。目前大多数高校的模版都挂在了 GitHub 上面,有些还发布在了 Overleaf 或者 CTAN 上面,请认准这些(半)官方渠道。(请问你会选择 pip、Anaconda,还是湿兄拷给你的 TensorFlow ?)

其次,GitHub 上面找模版,居然还去试了几个。没有经验可以告诉你一点经验:

  • 没有 README、LICENSE、.gitignore 的可以直接忽略(原文章居然吐槽了 LICENSE 这我还能说什么?)
  • Commit 很少,几个月内又没有什么更新,建议不要用
  • Issue 越多说明积累的问题越多,也就意味着用户越多,当然前提是作者要去处理 issue
  • Star、fork、watch 都很少的话请小心使用,不过也有可能是比较新的缘故
  • 使用 dtx 作为源代码、有测试文件、用 ci 的模版往往更靠谱一些

最后,下载下来觉得不好使。请问有看过模版的使用说明吗?有完全按照模版提供的编译说明来跑吗?这样再出现问题应该直接联系模版作者 or 跑去 GitHub 提 issue。一个靠谱的模版作者应当可以解决你的问题。

到此问题便得到了解决。我们可以总结一下:

  • 有问题请尽快整理出示例,向更有经验的人求助。一知半解 + 穷折腾很有可能会把问题代入死胡同。

  • 一定要给出

    最小工作示例(MWE):

    • 应当是一个完整的、在你的电脑上能编译的 $\LaTeX$文档
    • 何为完整?以 \documentclass 开始,以 \end{document} 结束
    • 在你电脑上的编译结果,应当能复现问题,或体现需求
    • 与复现问题和体现需求无关的代码应尽可能少,如各种宏包的加载、自定义的命令等
    • 尝试更换为标准文档类(articlectexart)等
    • 如果复现问题需要其他文件(图片、bib 等),请把它们和 LaTEX 文档一起打包
    • 对你的论文不感兴趣,如果你不变透漏论文代码我也不便帮你解决问题。
  • 给出 MWE 的过程就是 debug 的过程。这时需要进一步删掉无关代码,呈现问题原貌,此时可以:

    • Print 大法好!TEX 的 \show 命令可以展示宏的内容,而 LaTEX3 还提供了更多的类似函数
    • 一点点注释掉无关内容,二分法定位
    • 插断点,实际上 \show 的时候编译会中止,我们常利用多个 \show 来定位 bug

TEX 要面向现代化、面向世界、面向未来

众所周知,(La)TEX 是一个很古老的东西,很多问题归根结底都源自于历史的局限。「新一代」的引擎 XETEX 和 LuaTEX 十多年前就进了 TEX Live,阿玲姐姐的那一个也指日可待。然而却还总有人试图靠 8-bit 引擎来解决 CJK 问题,对这样固步自封的行为我们表示遗憾。

语言方面,宏语言捉襟见肘的表达能力确实是一个问题。但 LaTEX3 也在逐渐成熟,二十多年积累下来的方方面面的经验使得它正在成为标准库一样的东西。当有了统一的框架,可以想见开发与使用都将变得更加容易。与此同时,ConTEXt 那边也在持续地尝试新的想法,对 variable fonts 和 color fonts 的支持 2017 年就已经做了。所以,在追赶潮流的能力上 TEX 丝毫不比那几家商业公司差多少(误)。

作为开发者,我们自然希望用户的使用门槛可以一降再降,遇到的坑也能够越来越少。不过,这都建立在用户自己有尝试、探索、讨论与交流的热情之上。遇到问题,只会无头苍蝇一样四处乱撞,或者阴阳怪气地嘲讽,我们只能提醒你:恐怕使用 Word 的能力你也没有

bye

最后,其实Word用好了也不容易,入门门槛低,但是上限真的挺高的。对于本科生:我记得知乎上有人写了如何使用Word写科技论文。即使你用Word写过国赛论文写过美赛论文自以为能驾驭Word,其实还差的很远,我敢保证里面 70% 的操作不是常规操作,你没见过的, Word的上限还是挺高的。对于研究生:真的会 $\LaTeX$ 谁还用Word是吧。


感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章