对齐环境的宏

对齐环境的宏

是否可以为align*环境定义一个宏,或者允许方程显示模式多行支持$$ $$


我非常频繁地使用该align*环境,典型的用法如下:

\begin{align*}
A &= B \\
&= C
\end{align*}

每次输入整个命令很麻烦,所以我尝试为它们定义一个宏:

\documentclass[10pt]{article}
\usepackage{geometry}% larger text width
\usepackage{amsmath}

\newcommand{\begin{align*}}{\bal}
\newcommand{\end{align*}}{\eal}

\begin{document}
text here
\end{document}

但这会引发错误,似乎是因为\begin等不能适合定义\newcommand

! LaTeX Error: Command \begin already defined. (Line 5)
! Undefined control sequence. (Line 5)
! LaTeX Error: Command \end already defined. (Line 6)
! Undefined control sequence. (Line 6)

那么,可以执行以下操作之一吗?

  1. 为环境定义一个快捷方式align*
  2. 获得显示模式的多行对齐支持$$ $$
  3. 查找另一个创建具有可选编号的多行对齐方程的命令。

答案1

您要求的所有方面都是可能的,但是我建议您采用选项 #3。我将依次简要介绍每个方面。

  1. 为环境定义一个快捷方式align*

您无法通过 执行此操作\newcommand,正如您尝试过的那样(也无法通过 执行此操作\def,这足以满足一些较简单的环境)。我将细节留给其他 帖子(H/T Phelype Oleinik 和 David Carlisle)。虽然您可以使用更复杂的代码来实现这一点,但这样做通常不是一个好主意(H/T David Carlisle)。

  1. 获得显示模式的多行对齐支持$$ $$

目前没有很好的方法可以直接做到这一点,但有各种选项更一般地,最好考虑改进方程式对齐方法

  1. 查找另一个创建具有可选编号的多行对齐方程的命令。

虽然许多人更喜欢其他方式,但我建议breqn. 有许多有用 讨论备择方案

答案2

这是基于 LuaLaTeX 的实现第一个目标的方法。(通过实现第一个目标,就不再需要处理两个后备目标了,对吧?)这种方法允许您使用称为\bal\eal的标记,如果放在一行的开头,将被替换为,\begin{align*}并且\end{align*}在处理的早期阶段,TeX 完成其通常的工作。

请注意,仍然可以定义分别称为\bal和的“真实” LaTeX 宏\eal。只需确保它们永远不会在行首使用即可。

在此处输入图片描述

\begin{align*}话虽如此,我认为手写并没有那么繁琐或麻烦\end{align*}

\documentclass{article}
\usepackage{amsmath} % for 'align*' env.

\usepackage{luacode} % for '\luaexec' macro
\luaexec{
   function bal_eal ( s )
      s = s:gsub ( "^\\bal" , "\\begin{align*}" )
      s = s:gsub ( "^\\eal" , "\\end{align*}" )
      return s
   end
}

% Assign the Lua function to LuaTeX's 'process_input_buffer' callback:
\AtBeginDocument{\luaexec{luatexbase.add_to_callback( 
  "process_input_buffer", bal_eal, "baleal" )}}
% Define a separate macro called '\bal'
\newcommand\bal{Hello World} 

\begin{document}
\noindent
An instance of \verb+\bal+ not at the start of a line: \bal.
\bal % <-- '\bal' occurs at start of line
A &= B \\
  &= C
\eal % <-- '\eal' occurs at start of line
More text.
\end{document}

相关内容