我正在使用pdfLaTeX
。如果没有使用任何包,那么在显示的方程式中,行号将向右刷新。但如果我希望它们与右边距保持一定距离,比如说 0.35em,我可以通过重新定义来实现,\@eqnnum
如下所示:
\makeatletter
\def\@eqnnum{{\normalfont \normalcolor (\theequation)\hspace{0.35em}}}
\makeatother
但是,如果amsmath
使用,则上述操作无效。
假设我正在使用amsmath
。如何在方程编号和右边距之间插入任意但固定的距离?解决方案应该为所有显示的数学环境(equation
、multline
、align
等)插入相同的距离。
答案1
这确实很不幸,amsmath
对于方程编号和使用相同的内部宏\eqref
,但你可以回收https://tex.stackexchange.com/a/261647/4427
\documentclass{article}
\usepackage{amsmath}
\makeatletter
% detach \eqref and \tag making
\renewcommand{\eqref}[1]{\textup{\eqreftagform@{\ref{#1}}}}
\let\eqreftagform@\tagform@
\def\tagform@#1{%
\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)\quad}%
}
\makeatother
\begin{document}
\noindent X\dotfill X
\begin{equation}\label{test}
1=1
\end{equation}
X\dotfill X
Now we want \eqref{test} and that the space is right.
\end{document}
相反,\quad
您可以使用\hspace
您喜欢的任何长度。
答案2
我不会直接操作低级 TeX 宏,因为这样做可能会产生意想不到的不良后果。相反,我会采用高级方法,例如,\newtagform
通过\usetagform
使用数学工具包。我认为这样做是明智之举,因为这样可以很容易地在各种方程式标签形式之间切换。
为了创建问题中方程的交叉引用,我建议你加载聪明人包并使用其\cref
和\labelcref
宏,代替包\eqref
提供的宏。和amsmath
的一个很大的优点是它们可以接受多个参数,而不仅仅是一次一个。\cref
\labelcref
\documentclass{article} % or some other suitable document class
\usepackage{showframe} % to indicate edges of text block
\usepackage{mathtools} % for \newtagform and \usetagform macros
\newtagform{space}{(}{)\hspace{0.35em}}
\setlength\textwidth{3in} % just for this example
\usepackage[noabbrev]{cleveref} % <-- for \cref macro
\begin{document}
\usetagform{space}
\begin{equation}\label{eq:A} 1+1=2 \end{equation}
\begin{equation}\label{eq:B} 2+2=4 \end{equation}
A cross-reference to \cref{eq:A,eq:B}.
\usetagform{default} % revert to default tag form
\begin{equation}\label{eq:C} 3+3=6 \end{equation}
\end{document}