我想在图表和表格的标题中使用S.I
、、S.II
等连续标记我的图表和表格。S.III
我可以将figure
和table
标题更改为S.I
,...
\renewcommand{\tablename}{S.}
\renewcommand{\figurename}{S.}
\renewcommand{\thetable}{\Roman{table}}
\renewcommand{\thefigure}{\Roman{figure}}
但这仍然将图形和表格分开计算。S.I
因此存在两次,一次是第一个图形,一次是第一个表格。
我该如何避免这种情况?谢谢!
答案1
更新耦合计数器的概念现在为xassoccnt
1.0 版本(截至 2016/08/09 的当前版本),可在 CTAN/MikTeX 和 TeXLive 2016 上使用。
尽管此问题的链接中有答案,但我提供了另一个解决方案,其中包含我的xassoccnt
软件包(下一个版本)的实验代码。代码目前看起来很长,但它将隐藏在包中,使用其他宏当然会减少设置。未来的计划是拥有一堆“共享”或耦合的计数器,而不仅仅是本例中的两个。
注意:这并没有将\listoftables
和\listoffigures
功能合二为一List of ...
(在我看来,这很奇怪)
它与 一起工作hyperref
!
\documentclass{article}
\usepackage{xassoccnt}
\usepackage{blindtext}
\renewcommand{\tablename}{S.}
\renewcommand{\figurename}{S.}
\renewcommand{\thetable}{\Roman{table}}
\renewcommand{\thefigure}{\Roman{figure}}
\ExplSyntaxOn
\seq_new:N \l__xassoccnt_coupledcounters_seq
\NewDocumentCommand{\DeclareCoupledCounters}{mm}{%
\seq_clear:N \l__xassoccnt_coupledcounters_seq
\seq_gput_right:Nn \l__xassoccnt_coupledcounters_seq {#1}
\seq_gput_right:Nn \l__xassoccnt_coupledcounters_seq {#2}
}
\cs_set_eq:NN \xassoccnt_stepcounter \stepcounter
\cs_set_eq:NN \xassoccnt_setcounter \setcounter % Should be done
\cs_set_eq:NN \xassoccnt_addtocounter \addtocounter % Should be done
\RenewDocumentCommand{\stepcounter}{m}{%
\tl_set:Nx \l_tmpa_tl {#1}
\seq_if_in:NVTF \l__xassoccnt_coupledcounters_seq {\l_tmpa_tl} {%
\seq_map_inline:Nn \l__xassoccnt_coupledcounters_seq {%
\xassoccnt_stepcounter{##1}
}
}{
\xassoccnt_stepcounter{#1}% Only step #1
}
}
\ExplSyntaxOff
\DeclareCoupledCounters{figure}{table}
\usepackage{hyperref}
\begin{document}
\listoffigures
\listoftables
\section{First}
\blindtext[10]
\begin{figure}
\caption{foo figure}
\end{figure}
\blindtext[10]
\begin{table}
\caption{foo table}
\end{table}
\section{Second}
\blindtext[10]
\begin{figure}
\caption{other foo figure}
\end{figure}
\blindtext[10]
\begin{table}
\caption{other foo table}
\end{table}
\end{document}
答案2
如果不需要 hyperref:
\renewcommand{\tablename}{S.}
\renewcommand{\figurename}{S.}
\makeatletter
\let\c@table\c@figure
\makeatother
\renewcommand\thefigure{\Roman{figure}}
\let\thetable\thefigure