我使用罗马页码作为前言,我只是想知道,是否可以将这些罗马数字作为连字符?
看。
罗曼:
和
罗马:
答案1
这引入了两个新的编号:xroman
和xRoman
,它们会尝试执行您想要的操作。我们必须引入自己的 for 循环,因为我们必须使所有内容都可扩展。结果,我们只需在字母之间添加一个负空格。我们对小写字母使用小型大写字母,并使用一个强大的命令技巧在上添加点i
。
编辑:新版本与hyperref
软件包一起工作时不会引发警告。
编辑2:新版本允许对点进行水平调整i
。
\documentclass{article}
\pagenumbering{xroman}
\usepackage{hyperref}
\makeatletter
\DeclareRobustCommand \i@xroman{\rlap{\kern-0.007em\.{}}i}
\def \@xroman@for #1#2\@nil{\if i#1\i@xroman\else#1\fi\ifx\relax#2\relax\else\hskip-0.093em\@xroman@for#2\@nil\fi}
\def \@xRoman@for #1#2\@nil{\uppercase{#1}\ifx\relax#2\else\hskip-0.09em\@xRoman@for#2\@nil\fi}
\newcommand \@Xroman [1]{\begingroup\scshape\expandafter\expandafter\expandafter\@xroman@for\@roman{#1}\relax\@nil\endgroup}
\newcommand \@XRoman [1]{\begingroup \expandafter\expandafter\expandafter\@xRoman@for\@roman{#1}\relax\@nil\endgroup}
\newcommand \xroman [1]{\expandafter\@xroman\csname c@#1\endcsname}
\newcommand \xRoman [1]{\expandafter\@xRoman\csname c@#1\endcsname}
\AtBeginDocument{\@ifundefined{texorpdfstring}{
\let\@xroman\@Xroman
\let\@xRoman\@XRoman
}{
\newcommand \@xroman [1]{\texorpdfstring{\@Xroman{#1}}{\@roman{#1}}}
\newcommand \@xRoman [1]{\texorpdfstring{\@XRoman{#1}}{\@Roman{#1}}}
}}
\makeatother
\begin{document}
\setcounter{page}{3678}
\section{ABC}\label{abc}
This is Section \ref{abc} on page \pageref{abc}.
hello
\end{document}