我有一个问题。我想将几个公式一个接一个地写出来,我使用 来实现这一点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
:
\cite
在 里面有\text
。这意味着代码是在组内执行的,对 的所有更改\@eqcite
都是本地的,并在 的末尾消失\text
。所以我修改了代码,将分配改为\@eqcite
全局的。这要求在环境\@eqcite
结束时将 重置为空equation
。但是,如果equation
递归使用 ,则可能会失败。通常情况下不会,但理论上一个等式可能包含一些包含另一个等式的文本框。可能有点牵强,但可以通过在\@eqcite
任何分配之前保存在局部变量中,并在环境结束时从这个变量中恢复它来解决。这是我采取的解决方案。- 在
amsmath
方程中,数字通常不是由生成的\@eqnnum
,所以\@eqnnum
代码不会有帮助。而是由生成的\tagform@\theequation
,所以这也应该修补。我已经修补了\tagform@
,但我没有重写它,而是使用了\pretocmd
包etoolbox
,我觉得它更干净。有一个问题:\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}