twoside-mode 外部的方程标签

twoside-mode 外部的方程标签

此刻,我正在思考以下问题。当我使用该twoside模式写书时,我想打印方程式外部的数字。

我可以使用这两个命令手动修改它:

\makeatletter
\def\LEFTTAG{\tagsleft@true}\def\RIGHTTAG{\tagsleft@false}
\makeatother

这个解决办法很糟糕。

这是一个简单的例子:

\documentclass[a4paper]{book}
\usepackage{multido,lipsum,showframe}
\usepackage{amsmath}
\begin{document}
\chapter{foo}
\multido{\iA=0+1}{10}{%
\lipsum[1]
\begin{align}
x+y
\end{align}}
\end{document}

我如何修改默认环境来打印外部标签?

编辑 相对于 Werner 的答案和以下代码,可能性不太好:

\usepackage{scrextend,etoolbox}
\makeatletter
\preto\set@field{%
 \ifthispageodd{\global\tagsleft@false}{\global\tagsleft@true}%
}
\makeatother

答案1

作为解决这个问题的首次尝试,everyshi包裹很有帮助。在下面的定义中,根据页码是奇数还是偶数来选择左/右标签:

\usepackage{everyshi}% http://ctan.org/pkg/everyshi
\usepackage{xifthen}% http://ctan.org/pkg/xifthen
...
\makeatletter
\EveryShipout{%
  \ifthenelse{\isodd{\value{page}}}% Test page number
    {\global\tagsleft@true}% Following page will have left-tagged equations
    {\global\tagsleft@false}% Following page will have right-tagged equations
}
\makeatother

有一个小问题。每当在页面底部排版一个不完全适合并且必须被打破/刷新到下一页的方程式时,命令\EveryShipout在修改标签位置(左侧或右侧)时“太晚了”。一种补救措施是进行一些手动干预,以确保将方程式推到下一页页面被发送出去(例如,通过发布手册\break或者使用needspace包裹后者可能更优雅、更自动化,需要定义一个新的环境(使用environ包裹):

\usepackage{needspace}% http://ctan.org/pkg/needspace
\usepackage{environ}% http://ctan.org/pkg/environ
...
\NewEnviron{altalign}{% Alternating tag align \begin{altalign} ... \end{altalign}
  \setbox0=\hbox{% Store contents in box0
    \begin{minipage}{\linewidth}\begin{align*}% Unnumbered align
      \BODY
    \end{align*}\end{minipage}
  }%
  \Needspace{\ht0}% Need exactly height of box0 at the bottom of the page
  \begin{align}
    \BODY% Typeset regular tagged align
  \end{align}
}

environ这里包的使用\NewEnviron至关重要,因为需要捕获环境的主体/内容才能使用它(\BODY在本例中)。本质上,提供的环境排版环境中altalign所需的内容(即没有方程编号),嵌入宽度为 的中,并将所有内容存储在一个框中()。然后,发出 ,如果页面上有足够的空间( ),则不执行任何操作,否则,则执行该操作。随后,在传统(编号)环境中排版方程式,这次正确添加了。该解决方案有效,因为环境不会跨页面/列中断,因此可以将其视为单个块/框。alignalign*minipage\linewidthbox0\Needspace\ht0\breakalignEveryShipoutalign

根据页码交替显示公式编号

相关内容