定义计数器的罗马数字

定义计数器的罗马数字

我为示例定义了一个计数器,并希望它以大写罗马数字显示。

\newcounter{exampleCounter}
\newenvironment*{Example}{\refstepcounter{exampleCounter}~\\ \noindent \textbf{Example\Roman{exampleCounter}}~\\ \begin{itshape}}{\end{itshape}}

这工作得很好,但当我尝试引用示例时,我只收到阿拉伯数字。我试过了

\uppercase\expandafter{\romannumeral 0\ref{blah}}

(我找到的解决方案这里但是当我在文本中需要 ö,ä,ü 时,它就停止工作了。

起初,它没有找到小写的引用,我通过将标签设置为大写来解决问题,但仍然无法使用罗马数字。

工作示例

\documentclass{report}

\usepackage[ngerman,english]{babel}
\usepackage[utf8]{inputenc}

\newcounter{exampleCounter}
\newenvironment*{Example}{\refstepcounter{exampleCounter}~\\ \noindent \textbf{Example \Roman{exampleCounter}}~\\ \begin{itshape}}{\end{itshape}}

\begin{document}

\begin{Example}
\label{EX:BLAH}
    This is an Example, I want to reference
\end{Example}

\noindent
Arabic example \ref{EX:BLAH}    \\
Roman example \uppercase\expandafter{\romannumeral 0\ref{EX:BLAH}}

\end{document}

有人知道如何才能恢复这些罗马数字吗?

答案1

当你定义一个计数器时,LaTeX 会执行两个操作。它通过将实际计数器分配给寄存器来创建它,但它也会创建一个计数器表示宏。对于某些计数器<cntr>,后者由给出\the<cntr>。在内部,这由宏处理\@definecounter(来自latex.ltx(添加了评论):

\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname% <- Defined \c@<cntr>
     \setcounter{#1}\z@% <------------------------------------------- Sets counter to 0
     \global\expandafter\let\csname cl@#1\endcsname\@empty% <-------- Clear/reset list \cl@<cntr>
     \@addtoreset{#1}{@ckpt}%
     \global\expandafter\let\csname p@#1\endcsname\@empty% <--------- Reference prefix \p@<cntr>
     \expandafter
     \gdef\csname the#1\expandafter\endcsname\expandafter% <--------- Sets \the<cntr>
          {\expandafter\@arabic\csname c@#1\endcsname}}%              to be \arabic{<cntr>}

因此,就您的目的而言,使用

\newcounter{Abc}

LaTeX 创建

\c@Abc
\theAbc

(以及其他一些东西)。默认情况下,\the<cntr>设置为\arabic{<cntr>}。但您可以按照自己想要的方式重新定义它。具体来说,在您的例子中,使用\Roman{<cntr>}\the<cntr>在其他地方使用。

在此处输入图片描述

\documentclass{article}

\newcounter{exampleCounter}
\renewcommand{\theexampleCounter}{\Roman{exampleCounter}}
\newenvironment*{Example}
  {\refstepcounter{exampleCounter}% \begin{Example}
   \par\addvspace{\topsep}%
   \noindent\textbf{Example~\theexampleCounter}\par%
   \itshape\ignorespaces\noindent}
  {\par\addvspace{\topsep}%
   \ignorespacesafterend}% \end{Example}

\begin{document}

\noindent Here is some regular text.
\begin{Example}\label{EX:BLAH}%
This is an Example, I want to reference
\end{Example}
This is a reference to Example~\ref{EX:BLAH}.
\end{document}

改变这一点很重要,\the<cntr>因为这正是你制作时所使用的- LaTeX 在标签/引用中存储最后踏入\label的值。\the<cntr>

相关内容