边缘处的等式:自动向右或向左对齐?

边缘处的等式:自动向右或向左对齐?

怎样才能使\marginnote双面文档中的方程式自动左对齐或右对齐?

A上一个问题建议使用flalign*和额外的对齐字符使方程式左对齐。这也可以用来使方程式右对齐,如下所示。问题是:如何自动对出现在\marginnotes 中的方程式执行此操作?解决方案可能是使用if-then-else 偶数/奇数页,但如何将其干净地融入(fl)align*环境?

\documentclass[twoside]{scrartcl}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage{marginnote}
\begin{document}
\lipsum[1]
\marginnote{Is flush left (manually)
  \begin{flalign*}
    a&=1 &\\
    b&=1 &
  \end{flalign*}}
\lipsum[2]
\marginnote{How to make flush left automatically?
  \begin{align*}
    a&=1\\
    b&=1
  \end{align*}}
\lipsum[3-6]
\marginnote{Is flush right (manually):
  \begin{flalign*}
    && a&=1\\
    && b&=1
  \end{flalign*}}
\lipsum[7]
\marginnote{How to make flush right automatically?
  \begin{align*}
    a&=1\\
    b&=1
  \end{align*}}
\lipsum[8-9]
\end{document}

答案1

如果你不需要编号的方程式,那么使用一个简单的array

\documentclass[twoside]{scrartcl}
\usepackage{amsmath}
\usepackage{lipsum}
\usepackage{marginnote}
\newenvironment{Array}
  {\arraycolsep=1.4pt\par$\array{rl}}
  {\endarray$}
\begin{document}
\lipsum[1]
\marginnote{Is flush left (manually)
  \begin{Array}
    a&=1 \\
    b&=1 
  \end{Array}}
\lipsum[2]
\marginnote{How to make flush left automatically?
  \begin{Array}
    a&=1\\
    b&=1
  \end{Array}}
\lipsum[3-6]
\marginnote{Is flush right (manually):
  \begin{Array}
    a&=1\\
    b&=1
  \end{Array}}
\lipsum[7]
\marginnote{How to make flush right automatically?
  \begin{Array}
    a&=1\\
    b&=1
  \end{Array}}
\lipsum[8-9]
\end{document}

在此处输入图片描述

答案2

这就是我所说的半自动。

everyshi包裹通过宏提供一个进入页面输出例程的钩子\EveryShipout。因此,代码

\usepackage{everyshi}% http://ctan.org/pkg/everyshi
\def\flusheqnL{&} \def\flusheqnR{}%
\EveryShipout{%
  \ifodd\value{page}
    \gdef\flusheqnL{} \gdef\flusheqnR{&&}%
  \else
    \gdef\flusheqnL{&} \gdef\flusheqnR{}%
  \fi
}%

定义\flusheqnL和分别\flusheqnR具有默认值&{},并根据发货时的页码更改这些值\value{page}。如果页码为奇数,则将值分别交换为{}&&,以适应下一页(偶数)的不同对齐方式。实际上,这些宏用作环境中对齐字符的钩子flalign*。但是,这要求您marginnote使用以下格式排版方程式:

\marginnote{...
  \begin{flalign*}
    \flusheqnR ...&... \flusheqnL \\
    \flusheqnR ...&... \flusheqnL
  \end{flalign*}}

以下是输出示例:

\documentclass[twoside]{scrartcl}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{marginnote}% http://ctan.org/pkg/marginnote
\usepackage{everyshi}% http://ctan.org/pkg/everyshi
\def\flusheqnL{&} \def\flusheqnR{}%
\EveryShipout{%
  \ifodd\value{page}
    \gdef\flusheqnL{} \gdef\flusheqnR{&&}%
  \else
    \gdef\flusheqnL{&} \gdef\flusheqnR{}%
  \fi
}%

\begin{document}

\lipsum[1]
\marginnote{Is flush left (manually)
  \begin{flalign*}
    a&=1 &\\
    b&=1 &
  \end{flalign*}}
\lipsum[2]
\marginnote{How to make flush left automatically?
  \begin{flalign*}
    \flusheqnR a&=1 \flusheqnL \\
    \flusheqnR b&=1 \flusheqnL
  \end{flalign*}}
\lipsum[3-6]
\marginnote{Is flush right (manually):
  \begin{flalign*}
    && a&=1\\
    && b&=1
  \end{flalign*}}
\lipsum[7]
\marginnote{How to make flush right automatically?
  \begin{flalign*}
    \flusheqnR a&=1 \flusheqnL \\
    \flusheqnR b&=1 \flusheqnL
  \end{flalign*}}
\lipsum[8-9]
\end{document}

半自动对齐边注 flalign*

\flusheqnL和的重新定义\flusheqnR必须变为全局的(通过\gdef),以便它能够在组外(在 内\EveryShipout)保持。

相关内容