我需要一个环境,其中环境计数器的显示方式会根据计数器的值而变化。如果计数器小于 10,则必须在其后加上序数标记“º”,否则打印时不会带序数标记。
我尝试使用amsthm
和ifthen
包来做到这一点:
\newtheorem{artigo}{Art.}
\renewcommand{\theartigo}{%
\ifx\artigo<10%
\arabic{artigo}º%
\else%
\arabic{artigo}%
\fi%
}
但是它不起作用,当我使用环境时,我得到的是“Art. 1”,而不是“Art. 1º” artigo
。
我究竟做错了什么?
答案1
整数值的测试是通过
\ifnum counter value [relation] number ... \else ... \fi
IE
\ifnum\value{artigo} < 10
true branch
\else
false branch
\fi
或者可以使用
\makeatletter
\renewcommand{\theartigo}{%
\ifnum\c@artigo<10
\arabic{artigo}º%
\else
\arabic{artigo}
\fi
}
\makeatother
摆脱\value{artigo}
宏,但它的价格为\makeatletter...\makeatother
,因此没有节省打字费用 ;-) (\c@artigo
是保存计数器值的内部计数器宏)
\documentclass{article}
\usepackage[utf8]{inputenc}
\newtheorem{artigo}{Art.}
\renewcommand{\theartigo}{%
\ifnum\value{artigo}<10
\arabic{artigo}º%
\else
\arabic{artigo}%
\fi
}
\begin{document}
\begin{artigo}
Foo
\end{artigo}
\setcounter{artigo}{9}
\begin{artigo}
Foo again
\end{artigo}
\end{document}