避免重复表达的最佳方法

避免重复表达的最佳方法

我正在写一篇文章,其中我反复提到一些特定的表达式,这些表达式组成了我也反复提到的更复杂的表达式(更具体地说,我正在写一篇包含逻辑和集合论表达式的文章)。如果我将简单的表达式放在定义中,并从这些定义中构建更复杂的表达式,我将获得以下好处:

  1. 如果我决定改变某个特定的表达方式,那么很容易就能改变它,并且它会反映在我的整个文本中。
  2. 更容易避免不重复准确表达的错误。也就是说,更容易保持一致。
  3. 源代码可能更易于阅读和编写。

以下是一个例子:

\documentclass{article}

\def\firstcond{A \land B}
\def\secondcond{C \lor D}
\def\thirdcond{E \land F}
\def\firstimp{\firstcond \to \secondcond}
\def\secondimp{\thirdcond \to P(\secondcond )}

\begin{document}

\begin{equation}
(\firstimp ) \leftrightarrow ( \secondimp )
\end{equation}
\(\lnot (\secondimp )\) instead of \(\secondimp\), thus
\begin{equation}
(\firstimp ) \leftrightarrow \lnot( \secondimp )
\end{equation}

\end{document}

假设我认为这\firstcond是一个不好的表达方式,应该用其他方式来理解。那么我只需更改其定义\firstcond,它就会反映在我的整个文档中(我知道这可以通过编辑器的搜索和替换来完成,但这对第 2 点和第 3 点没有帮助)。

我更喜欢这个解决方案,因为它\def可以放在序言后面,这样它就可以在使用之前显示出来,这样它的内容就在文本中第一次使用的地方。这让写作变得更容易,因为我不必来回滚动或在文件之间切换来查看内容。

现在,我的问题是。这是实现这种写作/工作方式的最佳方式吗?有什么方法可以改进它吗?请注意,我并不是在寻找进行交叉引用的方法,因为在这种情况下,我不想让读者承担将标签连接到表达式的负担。

答案1

这是实现这种写作/工作方式的最佳方法吗?

是的。

我最近做了一件类似的事情这张纸我和我的合著者确信,无论我们选择什么符号,我们都会得到审稿人的评价,大致如下:“符号X很糟糕。我建议使用”。因此,我设计这篇论文的目的是尽可能轻松地更改所有符号。有一次,我甚至设置了它,这样一次更改就会将所有操作从左到右翻转(例如,后面f跟着而不是g)。因此,我非常同情你的处境,并认为总体方案是正确的做法。g ff g

有没有什么方法可以改善它?

是的。

让您的宏更明显地表明它们是什么。(这对您来说可能已经是事实了,在这种情况下请忽略此评论!)。有人说您应该这样写,当您在 6 个月后再次查看代码时,您不必弄清楚所有内容的含义。在我上面的例子中,我有形式为 、 的宏\dcat\dobj分别\delt表示“类别 D”、“D 的对象”和“D 对象的元素”。记住它们的含义并不难,同时仍保留更改其排版方式的灵活性。所以我的第一条建议是:

  1. 为您的宏选择一个好的命名方案。

接下来是关于节省时间和精力。就我而言,我发现自己定义了很多这些东西,而且都是一样的:我有一个类别,想要定义对象、态射、元素及其变体。所有这些都基于相同的基本模式。所以我写了一个“生成器”宏,它会接受几个基本参数,然后生成我想要使用的所有宏(一种粗略的面向对象编程)。当然,这对你来说有多可行取决于你使用 TeX 的能力,但即使你觉得现在这超出了你的能力,也值得提前计划一下,预计你可能会实施这样的方案,因此现在就选择你的名字。所以我的第二条建议是:

  1. 偷懒。在你的系统中构建层,这样就可以轻松更改这些内容的排版风格以及单个术语的显示方式。

答案2

  1. 迭代定义在数学中是自然的。
  2. 数学是第一,TeX 是第二。
  3. 尝试构建使用 TeX 命令的客观标准。
  4. 避免严重黑客攻击。

一些解释:

  1. 即便是科学知识以迭代的方式发展。这是最好的吗?谁知道呢——这就是我们现在所拥有的。
  2. 这有两个方面。首先,数学是一门学科,而 TeX 只是一种呈现数学的工具。其次,数学符号优于 TeX 符号,无论您如何改进您的 TeX 符号。
  3. 我的意见就在这里。--->3)
  4. 出版商一般不接受被严重黑客攻击的 TeX 代码并需要重写它。

3)

  1. 助记名称对于 TeX 命令。甚至不仅仅是助记符。我发现保持宏名称按书写顺序排列比破坏顺序更有助于记忆。这意味着首字母缩略词的构造方式相同 - 类似于助记符首字母缩略词。(在 Andrew Stacey 的\dcat“类别 D”示例中,助记符但不按书写顺序排列。请说\catofd\catd一些助记符示例按书写顺序排列。)
  2. 远程 TeX 命令一定有足够遥远的名字。(在 Andrew Stacey 的例子中\delt,“D 的对象元素”太接近\delta。说\elofobjofd\elobjd有一些助记符距离较远的例子。)
  3. 简短的定义应按其读音写,而不是按其含义写。复杂的定义应按其含义写,但要按“助记缩写”的发音写。
  4. 评论每个定义,或者每组类似的定义。
  5. 序言中的所有定义有两个原因。首先,这在数学上是“自然”的。许多书都有符号列表,或任何名称,其中符号在一个地方定义。此外,为了使符号更加一致,您必须将它们放在一起查看。其次,如果前言已预编译-预编译头文件使用 TikZ/Externalize 进行预编译的前言。那是在写作过程中,最后最好将序言放回到原来的位置。

我不需要来回滚动或在文件之间切换来查看内容。

你为什么需要这个?可以打开两个文件并排. 甚至一个文件拆分视图。例如 TeXnicCenter 有拆分视图 - 同一文件中的两个位置。并且Stefan Didak 的家庭办公室这绝对是一个极端的例子。:)


假设我认为这\firstcond是一个不好的表达方式,应该用其他方式来理解。那么我只需更改其定义\firstcond,它就会反映在我的整个文档中(我知道这可以通过编辑器的搜索和替换来完成,但这对第 2 点和第 3 点没有帮助)。

我不知道有没有更好的方法,不是严重的黑客攻击......

相关内容