我为示例定义了一个计数器,并希望它以大写罗马数字显示。
\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>