LaTeX 中的编码约定是什么?

LaTeX 中的编码约定是什么?

我所说的“惯例”是什么意思?

首先,请允许我澄清一下“惯例”一词。

大多数人已经知道,编码约定是针对特定编程语言的一组指导方针,它为用该语言编写的程序的各个方面推荐编程风格、实践和方法。[来自 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

相关内容