我希望我的方程式的标签出现在边缘,如下所示。
我使用以下代码实现这一点:
\documentclass[12pt, a4paper, twoside, onecolumn]{scrbook}
\usepackage[
leqno % Put equation tag on the left
]{amsmath}
% ----------
\makeatletter
% Formatting
\def\example@EquationNumberFormat{\bfseries}
\def\example@EquationLabelName{Eq.~}
% Define the distance to the margin from the equation tag location (i.e. left of page)
\def\example@EvenMargin{\dimexpr \marginparsep \relax} % even pages
\def\example@OddMargin{\dimexpr \marginparsep + \textwidth \relax} % odd pages
% Tag text
\def\tagform@#1{\maketag@@@{\example@EquationLabelName#1}}
% Tag location
% makebox must have some size otherwise the equation tag is not aligned to the equation (1sp is the smallest size unit)
% This only seems to be a problem for simple equation environments
\def\maketag@@@#1{%
\Ifthispageodd{%
\makebox[1sp][l]{\hspace*{\example@OddMargin}\example@EquationNumberFormat#1}
}{%
\makebox[1sp][r]{\example@EquationNumberFormat#1\hspace*{\example@EvenMargin}}
}
}
\makeatother
% ----------
% To show alignment of equation tags
\usepackage{showframe}
\begin{document}
\begin{equation}
y = m x + c
\end{equation}
\clearpage
\begin{align}
y = mx + c~\mathrm{;}&
&y = mx + c~\mathrm{;}&
&y = mx + c~\mathrm{,}
\end{align}
\clearpage
\begin{align}
y =& mx + c~\mathrm{,}\\
y =& mx + c~\mathrm{,}
\end{align}
\clearpage
\begin{equation}
\begin{split}
y = & mx\\
& + c
\end{split}
\end{equation}
\end{document}
但是,编译上述代码时,我收到几个警告:
第 50 行:奇数/偶数页标签编号 2 未定义
第 57 行:奇数/偶数页标签编号 4 未定义
第 57 行:奇数/偶数页标签编号 5 未定义
第 65 行:奇数/偶数页标签编号 8 未定义
这些警告似乎仅出现在align
和split
环境中,而不会出现在简单equation
环境中。
尽管输出是正确的,但我希望不要发出这些警告(通过纠正问题而不是忽略/抑制消息)。
警告来自文件\is@thispageodd
中的命令。我在throughscrbook.cls
的定义中使用了这个命令。\maketag@@@
\Ifthispageodd
查看的定义\is@thispageodd
,我可以看到发出警告的位置
\newcommand*{\scr@tpo}{0}
\newcommand*{\is@thispageodd}[1][\is@thispageodd@setlabel]{%
\@bsphack
\begingroup
\@tempcnta=\scr@tpo
\advance\@tempcnta by\@ne
\xdef\scr@tpo{\the\@tempcnta}%
\expandafter\ifx\csname tpo@\scr@tpo\endcsname\relax
\protect\G@refundefinedtrue
\ClassWarning{\KOMAClassName}{%
odd/even page label number \scr@tpo\space undefined}% <-- WARNING
\edef\@tempa{\the\value{page}}%
\else
\edef\@tempa{\csname tpo@\scr@tpo\endcsname}%
\fi
\ifodd\number\@tempa
\aftergroup\thispagewasoddtrue
\else
\aftergroup\thispagewasoddfalse
\fi
\endgroup
\edef\is@thispageodd@setlabel{%
\if@filesw
\unexpanded{\protected@write\@auxout{\let\arabic\relax}}{%
\noexpand\string
\noexpand\new@tpo@label{\scr@tpo}{\noexpand\arabic{page}}}%
\fi
\noexpand\def\noexpand\is@thispageodd@setlabel
{\unexpanded\expandafter{\is@thispageodd@setlabel}}%
}%
#1%
\@esphack
}
但我不知道该如何解决这个问题。
版本数据:
KOMA-Script 2020/01/24 v3.29
amsmath 2020/01/20 v2.17e