我使用一个使用宏创建表格的日记类\tbl
。表格计数器在每个部分之后重置。我需要使用宏\tbl
,但我还需要在开始新部分时不重置表格计数器,而是在我的论文中连续对表格进行编号。我尝试使用chngcntr
包和命令\counterwithout{table}{section}
,它仅在我忽略\tbl
宏并仅依赖标准表定义时才有效。
因此,当我使用下面的代码片段时,无论部分编号如何,我都会得到连续的表格编号(即表格 1、表格 2、表格 3、...等),但我丢失了日志为表格外观指定的属性:
\documentclass{Jclass}
\usepackage{chngcntr}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{natbib}
\usepackage{hyperref}
\usepackage[extra]{tipa}
\usepackage{blindtext}
\ifpdf%
\usepackage{epstopdf}%
\else%
\fi
\counterwithout{table}{section}
\begin{document}
\section{Section1}
\blindtext
\section{Section2}
\begin{table}[h!]
\centering
\caption{Table Caption Table Caption Table Caption Table Caption!}
\label{tab:table1}
\begin{tabular}{@{\extracolsep{\fill}}llll}
\hline
Col1& Col2& Col3& Col4\\
\hline
val1& val1& val1& val1 \\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1 \\
val1 & val1 & val1 & val1\\
\hline
\end{tabular}
\end{table}
\end{document}
当我使用宏作为下面的代码片段时,表计数器基于部分编号!
\documentclass{Jclass}
\usepackage{chngcntr}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{natbib}
\usepackage{hyperref}
\usepackage[extra]{tipa}
\usepackage{blindtext}
\ifpdf%
\usepackage{epstopdf}%
\else%
\fi
\counterwithout{table}{section}
\begin{document}
\section{Section1}
\blindtext
\section{Section2}
\begin{table}[h!]
\centering
\tbl{\caption{Table Caption Table Caption Table Caption Table Caption!}
\label{tab:table1}}
{\begin{minipage}{25pc}
\begin{tabular}{@{\extracolsep{\fill}}llll}
\hline
Col1& Col2& Col3& Col4\\
\hline
val1& val1& val1& val1 \\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1 \\
val1 & val1 & val1 & val1\\
\hline
\end{tabular}
\end{minipage}}
{\begin{tabnote}
\end{tabnote}}
\end{table}
\end{document}
这是期刊类别
如何使用\tbl
带有包的宏chngcntr
来获得连续的表格编号(即表 1、表 2、表 3、...等)或者是否有其他方法可以适用于期刊类别?
答案1
没有任何指令导致table
-counter 在每个部分被重置。
但我发现几个问题,其中第二个问题扭曲了表格的计数:
- 第 748 行:LaTeX 2ε-kernel-macro
\@pushfilename
的重新定义方式与较新的 LaTeX 2ε 版本不兼容。 - 第 2742 行:宏
\tbl
对事物进行两次排版,一次在\vbox
es 内进行测量,一次在\vbox
es 外。因此,诸如内部步进计数器之类的事情会执行两次。因此,计数器会步进两次,这会扭曲(或任何浮动)\caption
的计数。tables
- 第 3394 行:
\document
执行\endgroup
。在较新的 LaTeX 2ε 版本中,这会导致问题,因为此处 -macro\begin
本身会检查环境名称是否为document
,如果是,则执行\endgroup
。 \default@color
未定义/未初始化。JClass.cls
既不包含\ProvidesClass
也不包含其他记录文档类的版本号/发布号的方式,也不包含指示\NeedsTeXFormat{LaTeX2e}[<release date>]
该类可能与哪些 LaTeX 2ε 版本和哪些 TeX 引擎兼容的指令或类似内容。- 在.cls 文件中
\usepackage
使用 来代替\RequirePackage
。
(我认为这个清单并不详尽。)
在生成用于测量和初始化的代码后,注释掉对 -counter 的重新定义\@pushfilename
,并在 的定义中添加一条指令,\tbl
用于减少-counter 的值,并在第 3394 行中注释掉,得到以下代码,在我的系统上,table
\vbox
\default@color
\endgroup
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2020-10-01> patch level 4
L3 programming layer <2021-02-18>
,使用 xelatex 和 pdflatex 编译时没有错误消息,而使用 latex/lualatex 编译时会产生有关\Hy@colorlink
未定义的错误消息。
Jclass.cls
:
第 3394 行:
代替
\def\document{\endgroup
经过
\def\document{%%%\endgroup
第 2742 行及以下:
代替
\def\tbl#1#2#3{%
\global\setbox\tabcapbox\vbox{#1}%
\global\setbox\tabbox\hbox{#2}%
\global\setbox\tabnotebox\vbox{#3}%
\noindent\vbox{%
\tablemove\textwidth%
\advance\tablemove-\wd\tabbox%
\divide\tablemove2%
%\hspace*{\tablemove}
\vbox{%
\hsize\wd\tabbox%
#1%
#2%
#3}}}
经过
\def\tbl#1#2#3{%
\global\setbox\tabcapbox\vbox{#1}%
%%%%
% This is a crude and dirty and sloppy workaround:
\addtocounter{table}{-1}%
% If you want to be safe you need a routine which saves values
% of all counters before creating measuring boxes and resets
% all counter values afterwards. Not just counter-values
% need to be taken into account. Everything that must not be
% done twice and that is not delayed until the output-routine
% acts needs to be taken into account.
%%%%
\global\setbox\tabbox\hbox{#2}%
\global\setbox\tabnotebox\vbox{#3}%
\noindent\vbox{%
\tablemove\textwidth%
\advance\tablemove-\wd\tabbox%
\divide\tablemove2%
%\hspace*{\tablemove}
\vbox{%
\hsize\wd\tabbox%
#1%
#2%
#3}}}
第 748 行及以下:
代替
\def\@pushfilename{%
\xdef\@currnamestack{%
{\@currname}%
{\@currext}%
{\the\catcode`\@}%
\@currnamestack}}%
\@onlypreamble\@pushfilename%
\@pushfilename%
经过
%\def\@pushfilename{%
% \xdef\@currnamestack{%
% {\@currname}%
% {\@currext}%
% {\the\catcode`\@}%
% \@currnamestack}}%
%\@onlypreamble\@pushfilename%
%\@pushfilename%
test.tex
\documentclass{Jclass}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{natbib}
\usepackage[colorlinks=true]{hyperref}
\usepackage[extra]{tipa}
\usepackage{blindtext}
\ifpdf%
\usepackage{epstopdf}%
\else%
\fi
%\counterwithout{table}{section}
\makeatletter
\let\default@color\current@color
% In case you want table-counter to be reset when section-counter is stepped
% and \thetable to yield both the value of section-counter and the value of the
% table-counter:
%\@addtoreset{table}{section}%
%\renewcommand\thetable{\thesection.\@arabic\c@table}%
\makeatother
\color{black}
\begin{document}
\section{Section1}
\blindtext
\section{Section2}
\begin{table}[h!]
\centering
\tbl{\caption{Table Caption Table Caption Table Caption Table Caption!}
\label{tab:table1}}
{\begin{minipage}{25pc}
\begin{tabular}{@{\extracolsep{\fill}}llll}
\hline
Col1& Col2& Col3& Col4\\
\hline
val1& val1& val1& val1 \\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1\\
val1 & val1 & val1 & val1 \\
val1 & val1 & val1 & val1\\
\hline
\end{tabular}
\end{minipage}}
{\begin{tabnote}
\end{tabnote}}
\end{table}
\end{document}
完成上述修改后,test.tex
在我的系统上通过 xelatex 或 pdflatex 进行编译得到以下输出: