不同的线路

不同的线路

我找不到\cite在方程式中添加 的好方法。我想给出方程式来源的引用,但我不知道如何很好地排版。如果我将它与方程式本身一起包含,它会将对齐向左推,感觉就像它侵占了方程式的空间。我试过在\hfill\cite{example}方程式后面的线上放一个,但方程式和引用之间的垂直空间太大了。

我很想知道是否有一种我还没找到的普遍接受的方法。除此之外,如果有人能提出一些不太不雅的折衷方案,那也很好。

答案1

在我看来,你不应该在方程式内部添加引用,而应该在外部添加,如以下代码所示:

% arara: pdflatex: {synctex: yes}
% arara: biber
% arara: pdflatex: {synctex: yes}
% arara: pdflatex: {synctex: yes}
%
\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
From the famous inequality math relation~\cite{companion}
\begin{equation}
  y \neq x
\end{equation}
%
Or you can also say:
\begin{equation}
  y \neq x
\end{equation}
as proved by~\cite{companion} 
\printbibliography
\end{document}

enter image description here

这样就把方程留给自己了。这减少了参数和引用数之间的混淆。(方程就是方程——不要在里面放别的东西:-)

答案2

以下解决方案仅适用于标准环境equation 没有amsmath。它将 cite 命令存储在宏 中\@eqcite,然后将其设置为方程编号:

\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\makeatletter
\newcommand*{\eqcite}[1]{%
  \def\@eqcite{\org@cite{#1}}%
}
\let\@eqcite\@empty
\def\@eqnnum{%
  {%
    \normalfont
    \normalcolor
    \ifx\@eqcite\@empty
    \else
      \@eqcite\space
    \fi
    (\theequation)%
  }%
}
\g@addto@macro\equation{%
  \let\org@cite\cite
  \let\cite\eqcite
}
\let\org@cite\cite
\makeatother

\begin{document}
The famous inequality math relation:
\begin{equation}
  y \neq x \cite{companion}
\end{equation}
\printbibliography
\end{document}

Result

MWE 基于 Harish Kumar 的回答

不同的线路

根据评论中的要求,一个将方程编号和引用放在不同行的版本。恕我直言,这看起来也不太好。可以通过 来实现tabular。可选参数控制两条线相对于方程基线的垂直对齐。

\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{lipsum}

\makeatletter
\newcommand*{\eqcite}[1]{%
  \def\@eqcite{\org@cite{#1}}%
}
\let\@eqcite\@empty
\def\@eqnnum{%
  {%
    \normalfont
    \normalcolor
    \ifx\@eqcite\@empty
      (\theequation)%
    \else
      \begin{tabular}[t]{@{}r@{}}(\theequation)\\\@eqcite\end{tabular}%
    \fi
  }%
}
\g@addto@macro\equation{%
  \let\org@cite\cite
  \let\cite\eqcite
}
\let\org@cite\cite
\makeatother

\begin{document}
The famous inequality math relation:
\begin{equation}
  y \neq x \cite{companion}
\end{equation}
\lipsum[2]
\printbibliography
\end{document}

Result different lines

引文如下\vadjust

在前面的例子中,等式向左移动,因为作者/年份样式中的引用较长,减少了可用空间。

\llap可用于引用,但公式过度打印的风险太大。以下示例通过 将引用放在公式下方\vadjust。同样,它仅适用于不带包的 LaTeX amsmath

\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{lipsum}

\newcommand*{\eqcite}[1]{%
  \vadjust{%
    \smallskip
    \hbox to \linewidth{\hfill\cite{#1}}%
  }%
}

\begin{document}
The famous inequality math relation:
\begin{equation}
  y \neq x
  \eqcite{companion}
\end{equation}
\lipsum[2]
\printbibliography
\end{document}

Result with citation below equation using \vadjust

答案3

一个新近出现的解决方案,使用stackengine。第一种方法仅适用于标准equation环境。

\documentclass{article}
\usepackage{stackengine,filecontents}
\begin{filecontents*}{mybib.bib}
@ARTICLE{myref,
  AUTHOR = "last, first",
  TITLE = "This is the title",
  JOURNAL = "The Lancet",
  YEAR = "2014"
}
\end{filecontents*}
\bibliographystyle{unsrt}
\newcommand\citeequation[2]{%
  \stackengine{0pt}{$\displaystyle#1$}{\makebox[\linewidth]{\hfill \cite{#2}\kern20pt}}
    {O}{c}{F}{T}{L}
}
\begin{document}
\begin{equation}
\citeequation{E=mc^2}{myref}
\end{equation}
\bibliography{mybib}
\end{document}

enter image description here

align这是与和 一起使用的替代方法aligned,其中\aligncite必须在对齐点之后立即调用,但对于调用集中的第一个调用aligncite,需要将可选参数调整为特定方程。当不使用可选参数时,它将使用先前的设置。

\alkerndefault对于完全居中(基线)对齐点(此处设置为 20pt),是引文与边距的默认偏移量。 alkernbias是应用于任何给定方程组的偏差。虽然此处设置为 0pt,但只要使用align可选参数,就会全局重新定义它。\aligncite

\documentclass{article}
\usepackage{stackengine,filecontents,amsmath}
\begin{filecontents*}{mybib.bib}
@ARTICLE{myref,
  AUTHOR = "last, first",
  TITLE = "This is the title",
  JOURNAL = "The Lancet",
  YEAR = "2014"
}
@ARTICLE{myref2,
  AUTHOR = "last, first",
  TITLE = "Next title",
  JOURNAL = "JAP",
  YEAR = "2015"
}
\end{filecontents*}
\bibliographystyle{unsrt}
\newcommand\alkerndefault{20pt}% DETERMINES OFFSET OF BASELINE (CENTERED) CASE
\newcommand\alkernbias{0pt}% BIAS TO SHIFT WHEN ALIGNMENT POINT IS NOT CENTERED
\newcommand\aligncite[2][\relax]{%
  \ifx\relax#1\else\gdef\alkernbias{#1}\fi\def\alkern{\alkernbias}%
  \stackengine{0pt}{}{\makebox[\dimexpr\linewidth-2\dimexpr\alkerndefault]{%
    \hfill \protect\cite{#2}\kern-\dimexpr\alkern}}
    {O}{c}{F}{T}{L}
}
\begin{document}
\begin{align}
  Baseline/&\aligncite{myref}/Baseline
\end{align}
\begin{equation}
\begin{aligned}
 E &\aligncite[33.5pt]{myref}= mc^2\\
 y &\aligncite{myref2}= Ax^2 + Bx + C
\end{aligned}
\end{equation}
\begin{align}
 y &\aligncite{myref2}= mx + b\\
 E &\aligncite[18pt]{myref}= mc^2
\end{align}
\bibliography{mybib}
\end{document}

enter image description here

相关内容