我所说的“惯例”是什么意思?
首先,请允许我澄清一下“惯例”一词。
大多数人已经知道,编码约定是针对特定编程语言的一组指导方针,它为用该语言编写的程序的各个方面推荐编程风格、实践和方法。[来自 Wikipedia这些约定通常涵盖‘文件组织’、‘缩进’、‘注释’、‘声明’、‘语句’、‘空格’、‘命名约定’、‘编程实践’、‘编程原则’、‘编程经验法则’等。
一个例子!
例如,考虑 Java(和其他类似 C 的编程语言)。在 中Java Naming Conventions
,类名应该以UpperCamelCase
、方法和变量应遵循lowerCamelCase
并且常数应该是ALLCAPS
。
个人经历:
我在编写小型报告时意识到了一些这样的惯例。例如,第二次用 LaTeX 编写报告时,我意识到最好将每个章节放在单独的文件中。此外,我在阅读其他人的代码时也了解到了这一点,例如这这是我最近了解到的一个:One-Sentence-per-Line
。为了提高 Latex 源代码的可读性,这看起来非常重要,但直到我读到那个答案,我才想到了这一点。
问题来了!
我即将撰写硕士论文,我想知道 LaTeX 的这些约定。我的目标是实现一个可读、可重用、易于修改和标准源代码。
如果你知道任何惯例,或者你有自己的惯例,关于任何LaTeX 的一个方面,请与我分享,如果您能用理由或例子支持您的答案/惯例,我会很高兴。
答案1
我即将撰写我的硕士论文,我想知道这些乳胶惯例。我的目标是实现可读,可重复使用的, 易于修改和标准源代码。
恐怕我无法就“易于修改”和“标准源代码”部分提供任何建议,因为它们与 TeX 和 LaTeX2e 的本质相矛盾。你的问题听起来好像你受到了某些编码大祭司的影响。要当心,因为他们的喜好、代码和教导会发生变化。
首先,让我们区分一下写论文和编写 LaTeX 宏。我有一个朋友是画家,他是世界上最不整洁的人之一,但他的工作室却创作出最美丽的画作。我已故导师的办公室和他的办公桌上堆满了书籍、文件甚至旧披萨盒,但他却写出了漂亮的数学。教授和艺术家都拥有异常敏锐和专注的头脑。我猜你的目的是写论文并获得硕士学位。
使用一个好的发行版来组织你自己,设置一个 git 或其他版本控制系统,也许还有一个 dropbox 帐户,我建议你按如下方式组织你的文件夹(对我有用),
mythesis |
- chapter01
- notes
- chapter02
- chapter-nn
- graphics
- plots
- data
- any specials
- delete
bibliography files etc
main
mythesis-versions
thesis-01.zip
thesis-02.zip
thesis-03.zip
将写作与编码分开。写作时,我不想有任何干扰。代码是否漂亮、文本是否语法错误或拼写错误都无关紧要。我写作速度很快,专注于传达我的想法或构建代码以便工作。这样我就能更轻松地实现“流程”。在纸上而不是电脑上做这件事时,我处于最佳状态。找到适合你的方法。在效率较低的时间,我会整理代码或重写。
为了使你的代码可供你和同事重复使用,你需要使用以下方式打包和记录代码:文学编程,即创建一个.dtx
。
如果您使用,请LaTeX3
遵循团队推荐的惯例LaTeX3
,这是最接近标准的。但是,如果您发现自己主要处理LaTeX2e
代码,以下是一些建议:
在命名空间中使用后缀1,而不是在内部宏中使用前缀。它使 LaTeX2e 代码更具可读性,即
myfancysection@mex
而不是
@mex@my@fancy@section
LaTeX3 代码在设计上可读性不强,因此请遵守前缀等方面的约定。
g_mex_my_fancy_section
通常作者界面有 UpperCamelCasing 的约定,如果可能的话,打破这个规则。输入起来更困难
MyFancySection
相当
myfancysection
我个人认为后者比前者更易读,甚至更易读。德国人一直都用他们的语言来做到这一点。
我会做出例外,任何设置命令都可以大写。
DeclareDocumentFont and not declareDocumentFont or declaredocumentfont
一致性是好的,例如biblatex
作者创建的命令易于记忆并很好地表明了其目的。
textcite[][]{}
Textcite
我花了大约一个小时才找出问题所在:
setpgfkeys
我应该输入
setpgfqkeys
我看不出有什么区别。请谨慎选择命名方案,因为它是一个用户界面。尽可能使用键值接口。
只是为了给工作添麻烦,最干净、最易读的代码,看起来几乎就像是以美观为目的的组织是 ConTeXt。不幸的是,我并不经常使用它。
本网站上有很多围绕该主题的问答,请搜索并选择您认为适合您的内容。
笔记:
[1]关于后缀:(自然语言进化似乎也倾向于添加后缀。“der Kommunis穆斯(共产主义);“自然主义穆斯“(自然主义);“旅游穆斯“(旅游业)。我猜想一个人的编码背景和母语会影响可读性观点。如前所述,所有这些都是个人观点。也许语言学家可以在这里提供更多的见解。
答案2
我想补充一条有关命名约定的重要说明:在您的代码中,始终使用\newcommand
或其他高级宏来定义新命令。原因是您无法重新定义其他包的现有宏。
如果你需要重新定义它,你知道你在做什么,您可以使用\renewcommand
或者您可以说\let\mywhatevernamingconventioniprefer\relax
(这在某种意义上使宏“未定义”)。如果您通过其他命令(如\DeclareMathOperator
或)定义新宏,则这种“放松”是必要的\DeclarePairedDelimiter
。