怎样才能使\marginnote
双面文档中的方程式自动左对齐或右对齐?
A上一个问题建议使用flalign*
和额外的对齐字符使方程式左对齐。这也可以用来使方程式右对齐,如下所示。问题是:如何自动对出现在\marginnote
s 中的方程式执行此操作?解决方案可能是使用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}
\flusheqnL
和的重新定义\flusheqnR
必须变为全局的(通过\gdef
),以便它能够在组外(在 内\EveryShipout
)保持。