定义自定义命令是不好的做法吗?

定义自定义命令是不好的做法吗?

我最近在教授发来的电子邮件中收到了这个

良好的 LaTeX 风格会阻止创建任何自己的命令、计数器等。(大多数期刊会拒绝提交带有用户定义命令的文章。)

我有两个问题:

  1. 事实上这是真的吗(两部分都是如此)?
  2. 鉴于我需要符合特定的格式并且有很多重复(例如,我经常必须使用\qquad\textnormal)是否有办法定义一个命令,然后当我运行它时会生成一个扩展所有这些宏的文件?

笔记:我的理解是,这样做的标准方法是让期刊(或在这种情况下的教授)创建一个包,其中包含符合他们想要的风格所需的所有内容,但他似乎不想这样做。

答案1

抱歉,事实并非如此。大多数期刊接受合理的捷径:

\newcommand*\NN{\mathbb{N}} % natural numbers
\newcommand*\AAA{\mathcal{A}} % automaton
\newcommand*\WWW{\mathring{W}^2_1} % Sobolev space 2,1,o
\newcommand*\defined[1]{\emph{#1}} % used for defining new terms
\DeclarePairedDelimiter\abs{\lvert}{\rvert} % proper absolute value
...

然而,不是接受愚蠢的定义,例如:

\newcommand\pf{\begin{proof}} % don't hide a structure behind some ridiculous macros
\newcommand\pfe{\end{proof}}
\newcommand\eqa{\begin{eqnarray}} % twice bad, once for the shorthand ...
\newcommand\eqae{\end{eqnarray}} % ... and second time for using `eqnarray`
\newcommand\eqn{\begin{equation}}
\newcommand\eqne{\end{equation}}
\renewcommand\em{\sc} % not speaking about the fact that the ...
\renewcommand\bf{\it} % ... two-letter font macros are depricated
\newcommand\SPACE{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }
\newcommand\Hs{Hilbert space\xspace} % no text replacement shorthands like this please!
\def\A{{\cal A}} % this is bad in 3 ways -- can you guess what are they?
...

尽管如此,请:

  1. 所有事情都只定义一次(不做\NN同样\Naturals的事情)。
  2. 仅定义您真正使用的东西(没有 100 行定义但只有 5 行被使用)。
  3. 不要重新定义已经存在的东西。
  4. 使用适当的 LaTeX\newcommand而不是仅仅\def
  5. 将所有内容放在序言中。
  6. 像我上面做的那样,给每条评论都添加简短的评论\newcommand。特别是如果你做了一些肮脏的事情。但是:
  7. 不要做任何龌龊的事。

(作为一名期刊的排版编辑,以及众多出版物的作者,我使用过类似上述好的定义。)

答案2

这只是部分正确,并且只适用于特定情况。良好的 LaTeX 风格取决于几个因素,但通常要考虑三个因素:1. 可移植性,2. 逻辑标记和 3. 可读性/可编辑性。

软件包的使用会影响可移植性,因此通常应该删除那些不是绝对需要的软件包。期刊可能会退回失败的提交,因为他们没有特定的软件包或因为他们有不同版本。通常他们不会调试以找出哪个软件包有问题,并要求您全部删除!

逻辑标记几乎需要创建自己的命令。定义一个宏,其名称可以反映原因,这比\qquad\textnormal{...}经常重复这样的序列要好得多。

精心选择的宏名也会提高可读性,但编辑性却不会。编辑者可能想更改\qquad空格的宏名,但必须不断返回前言并通读定义才能知道要编辑哪个宏。如果作者的标记不一致(不同上下文中的空格命令相同),编辑者可能必须找到每个出现的情况并将它们更改为不同大小的空格。

有时,逻辑标记必须与可编辑性保持平衡。虽然编辑\qquad到很容易\quad,但阅读特殊命令并推断出需要更改的内容可能更困难。经过多年的努力,我的论文看起来尽可能漂亮,现在我将新命令保持在最低限度。大多数只有s(因为默认情况下没有定义)和 LaTeX 和忽略提供的\newtheorem少数\DeclareMathOperators 。我只使用和加载几个包,有时只有。(当然,如果我自己发布文档供自己使用,我会很疯狂。)amsmath\documentclass{article}amsmath

我见过许多论文中有数百个宏,其中大多数只是一些更易读的命令组合的难以理解的快捷方式,许多甚至从未使用过。这些东西编辑起来简直是一场噩梦。人们理解为什么编辑或教授不想看到这种情况,以及为什么期刊可能会包含说明(许多人都这样做)以“不带任何用户定义的命令”来撰写论文。

你的教授可能已经看过很多这样的说明,并得出结论,这是“良好的风格”。不过,你应该尽量让他高兴。你可以先问他是否需要有这么多命令\qquad\textnormal,是否有其他更好的方法。如果您必须使用它们,那么使用文本编辑器中的全局搜索和替换将所有单个命令转换为此扩展版本应该很简单。

答案3

我同意一些合理的快捷键不应该造成问题。但是,编辑需要确保整个问题的布局一致。避免任何破坏布局/文本流/… 的结构。您的代码应该简短易懂。命令名称应该清楚地表明命令的作用。还要考虑到 LaTeX 没有命名空间概念。可能是编辑自己定义了一些具有相同名称的命令。在这种情况下,您会破坏他的工作流程。

答案4

我所在领域(海洋学和地球物理学)的期刊往往不允许使用新的宏。美国地球物理联合会的流行期刊套件就是如此。我认为问题在于他们使用转换软件将乳胶转换为另一种标记语言,然后从中生成 html、乳胶以及将来可能有意义的任何东西。

大多数人一开始会觉得这很烦人,但很快就会意识到,很多宏并不是真正需要的。例如,美学调整无论如何都会被期刊删除,因为他们希望就这些事情做出决定,以保持一致性。至于节省输入的宏,这可能最好由好的文本编辑器来处理,例如 Emacs 和 Vim 都具有宏处理功能,可以将缩写扩展为完整形式。

我几乎从 Tex 首次编写以来就在使用它,并且自从 latex 面世以来我一直在使用它,我发现宏对于我自己打算发布的内容(例如内部课程笔记)非常有用,但期刊出版实际上是另一回事……在那里,重点应该完全放在所传达的材料上,而不是它在页面上的样子,因为其他人会掌舵。

相关内容