我对这个问题有点好奇类似于 \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 条目主从计数器。