有没有办法在序言中设置字符对齐

有没有办法在序言中设置字符对齐

我想知道的是是否存在某种前言声明,允许我设置align环境对齐的字符,而不必不断地输入与符号。

比如,如果我列出等式,我可以在序言中设置根据等号对齐所有内容吗?

答案1

这可能不是一个好主意,而且肯定会破坏一些东西,但你可以这样做

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\DeclareMathSymbol{\oldequals}{\mathrel}{operators}{`=}

\begin{document}

\begin{align}
a + b &= x\\
a + b + c &= x + y\\
c &= y
\end{align}


\catcode`\=\active
\def={&\oldequals}

\begin{align}
a + b = x\\
a + b + c = x + y\\
c = y
\end{align}


\end{document}

答案2

这不应该被太认真对待,但这是一个“通用解决方案”;我不知道它有多么强大。

\documentclass{article}

\usepackage{amsmath,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\defaultalignmentchars}{m}
 {
  \seq_gset_split:Nnn \g_ben_align_chars_seq { , } { #1 }
 }
\NewDocumentCommand{\notalignment}{m}
 {
  \use:c { __ben_saved_#1 }
 }
\makeatletter
\NewDocumentEnvironment{alignatchars}{ o }
 {
  \IfValueTF{#1}
   {
    \seq_set_split:Nnn \l__ben_align_chars_seq { , } { #1 }
   }
   {
    \seq_set_eq:NN \l__ben_align_chars_seq \g_ben_align_chars_seq
   }
  \ben_setup_alignment_chars:
  \start@align\@ne\st@rredfalse\m@ne
 }
 {\endalign}
\makeatother

\seq_new:N \g_ben_align_chars_seq
\seq_new:N \l__ben_align_chars_seq

\cs_new_protected:Npn \ben_setup_alignment_chars:
 {
  \seq_map_inline:Nn \l__ben_align_chars_seq { \ben_setup_char:N ##1 }
 }

\cs_new_protected:Npn \ben_setup_char:N #1
 {
  \token_if_mathchardef:NTF #1
   {
    \__ben_setup_cs:N #1
   }
   {
    \__ben_setup_ch:N #1
   }
 }

\cs_new_protected:Npn \__ben_setup_cs:N #1
 {
  \cs_set:cpx { __ben_saved_ \cs_to_str:N #1 } { \mathchar\int_eval:n { #1 } \scan_stop: }
  \cs_set:Npn #1 { & \use:c { __ben_saved_ \cs_to_str:N #1 } }
 }

\cs_new_protected:Npn \__ben_setup_ch:N #1
 {
  \cs_set:cpx { __ben_saved_ #1 } { \mathchar\char_value_mathcode:n { `#1 } \scan_stop: }
  \char_set_mathcode:nn { `#1 } { 32768 } % "8000
  \__ben_redefine_ch:N #1
 }

\group_begin:
\char_set_catcode_active:N \^^@
\cs_new:Npn \__ben_redefine_ch:N #1
 {
  \group_begin:
  \char_set_lccode:nn { `^^@ } { `#1 }
  \tl_to_lowercase:n { \group_end: \cs_set:Npn ^^@ } { & \use:c { __ben_saved_ #1 } }
 }
\group_end:

\ExplSyntaxOff

\defaultalignmentchars{=,\le}

\begin{document}

\begin{align}
a + b &= x = t\\
a + b + c &= x + y\\
c &\le y \le z
\end{align}

\begin{alignatchars}
a + b = x \notalignment{=} t\\
a + b + c = x + y\\
c \le y \notalignment{le} z
\end{alignatchars}

\begin{alignatchars}[\le]
a + b = x\\
a + b + c = x + y\\
c \le y \notalignment{le} z
\end{alignatchars}



\end{document}

没有可选参数的环境alignatchars使用用 声明的字符或控制序列作为对齐点\defaultalignmentchars,它接受以逗号分隔的字符和控制序列列表(应该是简单的数学字符,例如\le\rightarrow)。如果给出了可选参数,它应该是一个类似的列表,并且只有那些本地声明的字符或控制序列才会用于对齐。

如果声明的符号不应用于对齐,则可以将其用作参数\notalignment(不带反斜杠),如示例中所示。

在此处输入图片描述

话虽如此,这是一个很好的练习,但我并不推荐使用它。&输入中的很适合查看需要对齐的位置。

相关内容