如何按页码对方程式和浮动材料进行编号

如何按页码对方程式和浮动材料进行编号

我对这个问题有点好奇类似于 \enumerate,但每个 \item 都有自定义数字其中提到了一本书,其中每个问题都按页码和问题编号进行编号。

这个问题是关于手动对列表项进行编号,但如何让每个方程自动地按页码 + 每页的顺序编号。例如,第 50 页的第一个方程式编号为 50-1,第二个为 50-2,而下一页的第一个方程式编号为 51-1。

此外,如何将其扩展到涵盖浮动材料,即图形和表格。我更喜欢一种编号方式,其中每种类型的材料(公式、图形、表格)都有单独的计数器,因此第 50 页上的第一个公式、第一个图形和第一个表格都将编号为 50-1。(当然,可以通过引用“公式 50-1”、“图形 50-1”和“表格 50-1”来消除它们之间的歧义。)

对于任何想要解决这个问题的人,这里有一个简单的示例文档供您使用:

\documentclass{article}

\usepackage{lipsum}

\begin{document}

\def\bodytext{

\begin{equation}
 2 + 2 = 4
\end{equation}

\begin{equation}
 e^{\pi i} = -1
\end{equation}

\begin{figure}[htbp]
First figure.
\caption{Figure caption one.}
\end{figure}

\begin{figure}[htbp]
Second figure.
\caption{Figure caption two.}
\end{figure}

\begin{table}[htbp]
First table.
\caption{Table caption one.}
\end{table}
}

\bodytext
\lipsum
\bodytext
\lipsum
\bodytext

\end{document}

顺便说一句,我不确定“50-1”是不是最佳格式。我能想到的其他替代方案是 (50-1)、50.1、50(1) 和 50a,实际上我认为我更喜欢最后一个。对此有什么评论吗?(如果有,请将其作为评论发布,而不是答案。)

答案1

引自TeX 常见问题解答

输出例程是异步的,并且 (La)TeX 通常会在决定输出任何页面之前处理相当多的“下一页”。因此,计数器page(在 LaTeX 内部称为\c@page)通常仅在您实际输出例程。

换句话说,不要使用计数器page来完成手头的任务。相反,使用每页包裹。

\documentclass{article}

\usepackage{perpage}
\MakePerPage{equation}
\renewcommand{\theequation}{\theperpage--\arabic{equation}}
\MakePerPage{figure}
\renewcommand{\thefigure}{\theperpage--\arabic{figure}}
\MakePerPage{table}
\renewcommand{\thetable}{\theperpage--\arabic{table}}

\usepackage{lipsum}

\begin{document}

\def\bodytext{

\begin{equation}
 2 + 2 = 4
\end{equation}

\begin{equation}
 e^{\pi i} = -1
\end{equation}

\begin{figure}[htbp]
First figure.
\caption{Figure caption one.}
\end{figure}

\begin{figure}[htbp]
Second figure.
\caption{Figure caption two.}
\end{figure}

\begin{table}[htbp]
First table.
\caption{Table caption one.}
\end{table}
}

\bodytext
\lipsum
\bodytext
\lipsum
\bodytext

\end{document}

下面是一个仅使用计数器就可能发生的情况的示例page(根据 Werner 的回答修改而来)——第 2 页的第一个等式被错误地标记为(1--4):

\documentclass{article}
\usepackage{chngcntr}% http://ctan.org/pkg/chngcntr
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\counterwithin*{equation}{page}% equation counter is reset with every page counter reset
\renewcommand{\theequation}{\thepage-\arabic{equation}}% page-equation
\begin{document}
\lipsum[1]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[2]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[3]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[4]

A short paragraph.

Another short paragraph.
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[5]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[6]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[7]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\end{document}

答案2

好吧,当你发送页面时,你需要重新定义你的前缀。方法如下:

\documentclass{article}
\newcommand{\eqprefix}{1-}
\usepackage{atbegshi}
\AtBeginShipout{\gdef\eqprefix{\arabic{page}-}\setcounter{equation}{0}}
\renewcommand{\theequation}{\eqprefix\arabic{equation}}
\begin{document}
\begin{equation}
  \label{eq:first}
  a=b
\end{equation}
\newpage
\begin{equation}
  \label{eq:second}
  b=c
\end{equation}

From equations~(\ref{eq:first}) and~(\ref{eq:second})  we get:
\begin{equation}
  \label{eq:third}
  a=c
\end{equation}

\end{document}

答案3

警告:以下方法不如(比如说)提供的选项perpage包裹或者按照其他答案所建议的页面发货例程。


这是方程计数器的基本思想。

使用chngcntr包裹指定<master>使用计数器<slave>

\counterwithin*{<slave>}{<master>}

然后你可以重新定义如何equation使用计数器的打印

\renewcommand{\theequation}{\thepage-\arabic{equation}}%

这是一个简单的例子:

在此处输入图片描述

\documentclass{article}
\usepackage{chngcntr}% http://ctan.org/pkg/chngcntr
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\counterwithin*{equation}{page}% equation counter is reset with every page counter reset
\renewcommand{\theequation}{\thepage-\arabic{equation}}% page-equation
\begin{document}
\lipsum[1]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[2]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[3]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[4]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[5]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[6]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\lipsum[7]
\begin{equation}
  f(x)=ax^2+bx+c
\end{equation}
\end{document}

figure和环境也一样table

\counterwithin*{figure}{page}% figure counter is reset with every page counter reset
\renewcommand{\thefigure}{\thepage-\arabic{figure}}%
\counterwithin*{table}{page}% table counter is reset with every page counter reset
\renewcommand{\thetable}{\thepage-\arabic{table}}%

lipsum已添加虚拟文本。


实际上没有必要使用该chngcntr包,因为 LaTeX 确实提供了

\@addtoreset{<slave>}{<master>}

这需要\makeatletter\makeatother转义对。此时,这可能只是个人偏好。请参阅 TeX FAQ 条目主从计数器

相关内容