将公式逐个写在下方,并将来源写在公式旁边

将公式逐个写在下方,并将来源写在公式旁边

我有一个问题。我想将几个公式一个接一个地写出来,我使用 来实现这一点amsmath。但是,一旦我使用它,将公式的源数据打包在一起的定义代码就不再起作用了(见图)。

是否可以选择将公式一个接一个地写在下方,并将来源放在公式编号旁边?

\documentclass[12pt]{report}
\usepackage[ngerman]{babel}

\usepackage{biblatex}
\usepackage{amsmath}
\addbibresource{biblatex-examples.bib}

\makeatletter
\NewDocumentCommand\eqcite{oom}{%
  \def\@eqcite{\org@cite}%
  \IfNoValueF{#1}
    {\appto\@eqcite{[#1]}%
     \IfNoValueF{#2}
       {\appto\@eqcite{[#2]}}}%
  \appto\@eqcite{{#3}}}

\let\@eqcite\@empty
\def\@eqnnum{%
  {%
    \normalfont
    \normalcolor
    \ifx\@eqcite\@empty
    \else
      \@eqcite\space
    \fi
    (\theequation)%
  }%
}
\g@addto@macro\equation{%
  \DeclareCommandCopy\org@cite\cite
  \DeclareCommandCopy\cite\eqcite
}
\DeclareCommandCopy\org@cite\cite
\makeatother

\usepackage[ngerman]{cleveref}
\crefname{equation}{Formel}{Formel}
\creflabelformat{equation}{#2\textup{#1}#3}

\begin{document}
The famous inequality math relation:
\begin{equation}
  \label{eq:test}
  \text{\cite{sigfridsson}}
  y \neq x 
\end{equation}


New formula

\begin{equation}
  \text{\cite[235]{sigfridsson}}
  y \neq x 
\end{equation}


\begin{align}
    \label{eqn:eqlabel}
    \begin{split}
        f(x) &= x^2 ,
        \\
        g(x) &= \exp( x ) .
    \end{split}
\end{align}


\cref{eq:test}
\printbibliography
\end{document}

我想要的(公式中的公式一个接一个)

在此处输入图片描述

没有amsmath它就行

\documentclass[12pt]{report}
\usepackage[ngerman]{babel}

\usepackage{biblatex}
%\usepackage{amsmath}
\addbibresource{biblatex-examples.bib}

\makeatletter
\NewDocumentCommand\eqcite{oom}{%
  \def\@eqcite{\org@cite}%
  \IfNoValueF{#1}
    {\appto\@eqcite{[#1]}%
     \IfNoValueF{#2}
       {\appto\@eqcite{[#2]}}}%
  \appto\@eqcite{{#3}}}

\let\@eqcite\@empty
\def\@eqnnum{%
  {%
    \normalfont
    \normalcolor
    \ifx\@eqcite\@empty
    \else
      \@eqcite\space
    \fi
    (\theequation)%
  }%
}
\g@addto@macro\equation{%
  \DeclareCommandCopy\org@cite\cite
  \DeclareCommandCopy\cite\eqcite
}
\DeclareCommandCopy\org@cite\cite
\makeatother

\usepackage[ngerman]{cleveref}
\crefname{equation}{Formel}{Formel}
\creflabelformat{equation}{#2\textup{#1}#3}

\begin{document}
The famous inequality math relation:
\begin{equation}
  \label{eq:test}
  \cite{sigfridsson}
  y \neq x 
\end{equation}


New formula

\begin{equation}
  \cite[235]{sigfridsson}
  y \neq x 
\end{equation}


%\begin{align}
%   \label{eqn:eqlabel}
%   \begin{split}
%       f(x) &= x^2 ,
%       \\
%       g(x) &= \exp( x ) .
%   \end{split}
%\end{align}



\printbibliography
\end{document}





在此处输入图片描述

答案1

您的示例有两个问题amsmath

  1. \cite在 里面有\text。这意味着代码是在组内执行的,对 的所有更改\@eqcite都是本地的,并在 的末尾消失\text。所以我修改了代码,将分配改为\@eqcite全局的。这要求在环境\@eqcite结束时将 重置为空equation。但是,如果equation递归使用 ,则可能会失败。通常情况下不会,但理论上一个等式可能包含一些包含另一个等式的文本框。可能有点牵强,但可以通过在\@eqcite任何分配之前保存在局部变量中,并在环境结束时从这个变量中恢复它来解决。这是我采取的解决方案。
  2. amsmath方程中,数字通常不是由生成的\@eqnnum,所以\@eqnnum代码不会有帮助。而是由生成的\tagform@\theequation,所以这也应该修补。我已经修补了\tagform@,但我没有重写它,而是使用了\pretocmdetoolbox,我觉得它更干净。有一个问题:\tagform@也用于生成方程编号。因此,如果您在另一个具有的方程中\eqref引用另一个方程,则引用也将包含引用。为了解决这个问题,我使用的原始定义重新定义。我在示例中添加了这样的引用来证明它是有效的。\eqref\cite\eqref\tagform@

我还添加了一些代码来在环境中设置您的\cite机制align。基本上,这需要\g@addto@macro\equation在 中复制代码\g@addto@macro\align。但是,有很多align类似 的环境,与其为所有环境复制代码,不如对其进行优化。它们都以 开头,以\start@align结尾\endalign。但\start@align有点奇怪:您不能在末尾添加代码;否则它会中断。所以我将代码添加到开头\pretocmd

如果您想在其他环境中使用它,很可能只需使用非常相似的代码即可。但请注意,这amsmath是一堆乱七八糟的代码,因此这可能是一个挑战。

\documentclass[12pt]{report}
\usepackage[ngerman]{babel}
\usepackage{etoolbox}

\usepackage{biblatex}
\usepackage{amsmath}
\addbibresource{biblatex-examples.bib}

\makeatletter
\newcommand{\save@eqcite}{}
\NewDocumentCommand\eqcite{oom}{%
  \gdef\@eqcite{\org@cite}%
  \IfNoValueF{#1}
    {\gappto\@eqcite{[#1]}%
     \IfNoValueF{#2}
       {\gappto\@eqcite{[#2]}}}%
  \gappto\@eqcite{{#3}}}

\let\@eqcite\@empty
\def\@eqnnum{%
  {%
    \normalfont
    \normalcolor
    \ifx\@eqcite\@empty
    \else
      \@eqcite\space
    \fi
    (\theequation)%
  }%
}

\g@addto@macro\equation{%
  \let\save@eqcite\@eqcite
  \DeclareCommandCopy\org@cite\cite
  \DeclareCommandCopy\cite\eqcite
}
\g@addto@macro\endequation{%
  \global\let\@eqcite\save@eqcite
}

\ifdefined\tagform@
  \let\orig@tagform@\tagform@
  \DeclareRobustCommand{\eqref}[1]{\textup{\orig@tagform@{\ref{#1}}}}

\def\tagform@#1{\ifx\@eqcite\@empty
    \else
      \hbox{\@eqcite\space}%
    \fi\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}

\pretocmd\start@align{%
  \let\save@eqcite\@eqcite
  \DeclareCommandCopy\org@cite\cite
  \DeclareCommandCopy\cite\eqcite
}{}{}
\g@addto@macro\endalign{%
  \global\let\@eqcite\save@eqcite
}
\fi

\DeclareCommandCopy\org@cite\cite
\makeatother

\usepackage[ngerman]{cleveref}
\crefname{equation}{Formel}{Formel}
\creflabelformat{equation}{#2\textup{#1}#3}

\begin{document}
The famous inequality math relation:
\begin{equation}
  \label{eq:test}
  \text{\cite{sigfridsson}}
  y \neq x 
\end{equation}


New formula

\begin{equation}
  \text{\cite[235]{sigfridsson}}
  \text{As in equation~\eqref{eq:test}:~}
  y \neq x 
\end{equation}


\begin{align}
    \label{eqn:eqlabel}
    \begin{split}
      \text{\cite{sigfridsson}}
        f(x) &= x^2 ,
        \\
        g(x) &= \exp( x ) .
    \end{split}
\end{align}


\cref{eq:test}
\printbibliography
\end{document}

在此处输入图片描述

相关内容