答案1
您可以在两个字符之间插入负空格:
\documentclass{article}
\newcommand{\joinR}{\hspace{-.1em}}
\newcommand{\RomanI}{I}
\newcommand{\RomanII}{\mbox{\RomanI\joinR\RomanI}}
\newcommand{\RomanIII}{\mbox{\RomanI\joinR\RomanII}}
\newcommand{\RomanIV}{\mbox{\RomanI\joinR\RomanV}}
\newcommand{\RomanV}{V}
\newcommand{\RomanVI}{\mbox{\RomanV\joinR\RomanI}}
\newcommand{\RomanVII}{\mbox{\RomanV\joinR\RomanII}}
\newcommand{\RomanVIII}{\mbox{\RomanV\joinR\RomanIII}}
\newcommand{\RomanIX}{\mbox{\RomanI\joinR\RomanX}}
\newcommand{\RomanX}{X}
\begin{document}
I \RomanI
II \RomanII
III \RomanIII
IV \RomanIV
V \RomanV
VI \RomanVI
VII \RomanVII
VIII \RomanVIII
IX \RomanIX
X \RomanX
\end{document}
以上内容应适用于所有字体开关(\tiny
、\scriptsize
、\footnotesize
、 ... \Huge
)。如果您希望它们靠得更近/更远,您可以根据需要调整间距。
microtype
的letterspace
软件包还提供了\textls
您可以使用的(带星号的版本):
\documentclass{article}
\usepackage{letterspace}
\newcommand{\ROMAN}{\textls*[-100]}
\begin{document}
I \ROMAN{I}
II \ROMAN{II}
III \ROMAN{III}
IV \ROMAN{IV}
V \ROMAN{V}
VI \ROMAN{VI}
VII \ROMAN{VII}
VIII \ROMAN{VIII}
IX \ROMAN{IX}
X \ROMAN{X}
\end{document}
答案2
下面定义了两个宏。第一个宏将\tighten
其参数中每个字母之间的间距减少给定的长度(默认为 0.25ex)。这用于手动插入罗马数字。
第二种是\TightRoman
用来\tighten
设置带有紧凑罗马数字的计数器。
\documentclass[]{article}
\makeatletter
\newlength\tighten@stretch
\newcommand*\tighten[2][0.25ex]{%
\if\relax\detokenize{#2}\relax% detect empty argument
\else
\bgroup
\tighten@stretch=#1
\expandafter\tighten@#2@%
\egroup
\fi}
\def\tighten@#1#2{%
#1%
\tighten@check{#2}{%
\kern-\tighten@stretch
\tighten@#2
}}
\def\tighten@check#1{%
\ifx @#1%
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi}
\newcommand*\TightRoman[2][0.25ex]{%
\edef\TightRoman@tmp{\Roman{#2}}%
\expandafter\TightRoman@i\expandafter{\TightRoman@tmp}{#1}}%
\newcommand*\TightRoman@i[2]{%
\tighten[#2]{#1}}
\makeatother
\begin{document}
\noindent
\newcounter{mycounter}%
\loop\ifnum\value{mycounter}<20
\stepcounter{mycounter}%
\TightRoman{mycounter}\space
\repeat
\tighten{XII}
\end{document}