Latex 连续表格编号和 \tbl 宏

Latex 连续表格编号和 \tbl 宏

我使用一个使用宏创建表格的日记类\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

我看了你的JClass 类,也可以是下载

没有任何指令导致table-counter 在每个部分被重置。

但我发现几个问题,其中第二个问题扭曲了表格的计数:

  1. 第 748 行:LaTeX 2ε-kernel-macro\@pushfilename的重新定义方式与较新的 LaTeX 2ε 版本不兼容。
  2. 第 2742 行:宏\tbl对事物进行两次排版,一次在\vboxes 内进行测量,一次在\vboxes 外。因此,诸如内部步进计数器之类的事情会执行两次。因此,计数器会步进两次,这会扭曲(或任何浮动)\caption的计数。tables
  3. 第 3394 行:\document执行\endgroup。在较新的 LaTeX 2ε 版本中,这会导致问题,因为此处 -macro\begin本身会检查环境名称是否为document,如果是,则执行\endgroup
  4. \default@color未定义/未初始化。
  5. JClass.cls既不包含\ProvidesClass也不包含其他记录文档类的版本号/发布号的方式,也不包含指示\NeedsTeXFormat{LaTeX2e}[<release date>]该类可能与哪些 LaTeX 2ε 版本和哪些 TeX 引擎兼容的指令或类似内容。
  6. 在.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 进行编译得到以下输出:

在此处输入图片描述

相关内容