将所有计数器转换为 6 进制

将所有计数器转换为 6 进制

是否可以更改 LaTeX 的计数基数?实际上,我正在寻找 6 基数。

我希望此更改适用于所有计数器(目录、页面、章节……)。我找到了这个主题我如何确保全部计数器从 0 开始? 这几乎正​​是我想要的,但我没有以 10 为底到以 6 为底的函数。

\makeatletter
\def\@arabic#1{\BASEVI\relax} 
\def\@roman#1{\romannumeral\BASEVI\relax}
\def\@Roman#1{\expandafter\@slowromancap\romannumeral\BASEVI\relax @}
\makeatother

BASEVI只是一个占位符。

欲了解更多有关性别系统的信息:seximal.net

答案1

一句话:

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_set:cpn {@arabic} #1 { \int_to_base:nn { #1 } { 6 } }
\ExplSyntaxOff

\setlength{\textheight}{2.5cm} % to keep the image small

\begin{document}

\newcounter{test}

\loop\ifnum\value{test}<100
  \arabic{test}%
  \stepcounter{test}%
  \space
\repeat

\end{document}

每个定义使用的计数器都\arabic将以六进制打印,包括page

在此处输入图片描述

注意:这将破坏所有滥用\the<counter>获取计数器的十进制表示而不是依赖其抽象值的宏。

更好地定义一个合适的表示并选择它来表示您需要的计数器。

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new:Npn \basesix_print:N #1 { \int_to_base:nn { #1 } { 6 } }
\cs_generate_variant:Nn \basesix_print:N {c}
\cs_new:Npn \basesix_start:n #1 { \basesix_print:c {c@#1} }
% user interface
\cs_new_eq:NN \basesix \basesix_start:n
% to keep \pagenumbering{basesix} happpy
\cs_new_eq:cN {@basesix} \basesix_print:N
\ExplSyntaxOff

\setlength{\textheight}{2.5cm} % to keep the image small
\pagenumbering{basesix}

\begin{document}

\setcounter{page}{6}

\newcounter{test}
\renewcommand{\thetest}{\basesix{test}}

\loop\ifnum\value{test}<100
  \thetest
  \stepcounter{test}%
  \space
\repeat

\end{document}

在此处输入图片描述

答案2

在此处输入图片描述

\documentclass{article}

\usepackage{expl3}
\ExplSyntaxOn
\def\SIX#1{\expandafter\int_to_base:nn\csname c@#1\endcsname6}
\ExplSyntaxOff
\renewcommand\thesection{\SIX{section}}
\renewcommand\theenumi{\SIX{enumi}}
\begin{document}

\section{aa}

\begin{enumerate}
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\item aaa
\end{enumerate}

\section{zzz}
zz
\section{zzz}
zz
\section{zzz}
zz
\section{zzz}
zz
\section{zzz}
zz
\section{zzz}
zz

\end{document}

相关内容