从 \pageref 缩短页面范围

从 \pageref 缩短页面范围

在某些印刷惯例中,页面范围会缩短以节省空间,例如,写成“1234-35”或甚至“1234-5”而不是“1234-1235”。我希望\pageref{foo}--\pageref{bar}自动缩短为其中任何一种格式。

我从以下答案中得知 参考页码范围:LaTeX 可以将“3-4”转换为第 4f 页,或者将“3-5”转换为第 3ff 页吗?应该varioref可以做到这一点,但让 Martin Scharrer 的定制适应我的问题,老实说,这超出了我的理解范围。

我怎样才能做到这一点?

或者我忽略了另一个可以开箱即用的软件包?

答案1

由于没有人接受,我尝试了以下方法,使用了上面提到的 Martin Scharrer 的示例。欢迎改进!

注释掉第一个条件会导致“1234-35”格式。

\documentclass[a3paper]{scrartcl}

\usepackage{varioref}


\makeatletter


\newcommand*{\vrefabbr}[2]{%
\begingroup
    \vrefpagenum\@tempa{#1}%
    \vrefpagenum\@tempb{#2}%
    \if ?\@tempa\else
    \if ?\@tempb\else
    \ifx\@tempa\@tempb
        \@tempa%
    \else
        \ifnum\@tempa>\@tempb\relax
            \let\@tempc\@tempb
            \let\@tempb\@tempa
            \let\@tempa\@tempc
        \fi
        \ifnum\numexpr(\@tempa-5)/10= \numexpr(\@tempb-5)/10\relax
            \@tempa --\the\numexpr\@tempb-(\@tempb-5)/10*10\relax
        \else
            \ifnum\numexpr(\@tempa-50)/100= \numexpr(\@tempb-50)/100\relax
                \@tempa --\the\numexpr\@tempb-(\@tempb-50)/100*100\relax
            \else
                \ifnum\numexpr(\@tempa-500)/1000= \numexpr(\@tempb-500)/1000\relax
                    \@tempa --\the\numexpr\@tempb-(\@tempb-500)/1000*1000\relax
                \else
                    \@tempa --\@tempb%
                \fi
            \fi
        \fi
    \fi
    \fi
    \fi
\endgroup
}
\makeatother

\begin{document}


ix--x: \vrefabbr{ix}{x}

ix--xiv: \vrefabbr{ix}{xiv}

xi--xiv: \vrefabbr{xi}{xiv}

xi--xv: \vrefabbr{xi}{xv}

xi--xvi: \vrefabbr{xi}{xvi}

xi--xii: \vrefabbr{xi}{xii}

xii--xiii: \vrefabbr{xii}{xiii}

xiii--xii: \vrefabbr{xiii}{xii}

xi--xi: \vrefabbr{xi}{xi}

xiii--xvi: \vrefabbr{xiii}{xvi}

xiii--xx: \vrefabbr{xiii}{xx}

xx--xxi: \vrefabbr{xx}{xxi}

xx--xxii: \vrefabbr{xx}{xxii}

xi--xxi: \vrefabbr{xi}{xxi}

xi--xx: \vrefabbr{xi}{xx}

cxix--cxvi: \vrefabbr{cxix}{cxvi}

cxix--cxii: \vrefabbr{cxix}{cxxii}

cxii--cxiii: \vrefabbr{cxii}{cxiii}

cxiii--cxii: \vrefabbr{cxiii}{cxxii}

cxi--cxi: \vrefabbr{cxi}{cxi}

cxiii--cxvi: \vrefabbr{cxiii}{cxvi}

cxiii--cxx: \vrefabbr{cxiii}{cxx}

cxx--cxxi: \vrefabbr{cxx}{cxxi}

cxx--cxxii: \vrefabbr{cxx}{cxxii}

cxi--cxxi: \vrefabbr{cxi}{cxxi}

cxi--cxx: \vrefabbr{cxi}{cxx}

cxi--cxxii: \vrefabbr{cxi}{cxxii}

mcxi--mcxvi: \vrefabbr{mcxi}{mcxvi}

mcxi--mcxii: \vrefabbr{mcxi}{mcxii}

mcxii--mcxiii: \vrefabbr{mcxii}{mcxiii}

mcxiii--mcxii: \vrefabbr{mcxiii}{mcxii}

mcxi--mcxi: \vrefabbr{mcxi}{mcxi}

mcxiii--mcxvi: \vrefabbr{mcxiii}{mcxvi}

mcxiii--mcxx: \vrefabbr{mcxiii}{mcxx}

mcxx--mcxxi: \vrefabbr{mcxx}{mcxxi}

mcxx--mcxxii: \vrefabbr{mcxx}{mcxxii}

mcxi--mcxxi: \vrefabbr{mcxi}{mcxxi}

mcxi--mcxx: \vrefabbr{mcxi}{mcxx}

mcxi--mcxxii: \vrefabbr{mcxi}{mcxxii}

cxi--mcxxii: \vrefabbr{cxi}{mcxxii}

cxi--mcxxii: \vrefabbr{cxi}{mcxxii}

xi--mcxxii: \vrefabbr{xi}{mcxxii}

ix--mcxxii: \vrefabbr{ix}{mcxxii}

mccxxxiv--mccxxxv \vrefabbr{mccxxxiv}{mccxxxv}


\setcounter{page}{9}
\section{}\label{ix}\newpage
\section{}\label{x}\newpage
\section{}\label{xi}\newpage
\section{}\label{xii}\newpage
\section{}\label{xiii}\newpage
\section{}\label{xiv}\newpage
\section{}\label{xv}\newpage
\section{}\label{xvi}\newpage
\section{}\label{xvii}\newpage
\section{}\label{xviii}\newpage
\section{}\label{xix}\newpage
\section{}\label{xx}\newpage
\section{}\label{xxi}\newpage
\section{}\label{xxii}\newpage

\setcounter{page}{111}
\section{}\label{cxi}\newpage
\section{}\label{cxii}\newpage
\section{}\label{cxiii}\newpage
\section{}\label{cxiv}\newpage
\section{}\label{cxv}\newpage
\section{}\label{cxvi}\newpage
\section{}\label{cxvii}\newpage
\section{}\label{cxviii}\newpage
\section{}\label{cxix}\newpage
\section{}\label{cxx}\newpage
\section{}\label{cxxi}\newpage
\section{}\label{cxxii}\newpage

\setcounter{page}{1111}
\section{}\label{mcxi}\newpage
\section{}\label{mcxii}\newpage
\section{}\label{mcxiii}\newpage
\section{}\label{mcxiv}\newpage
\section{}\label{mcxv}\newpage
\section{}\label{mcxvi}\newpage
\section{}\label{mcxvii}\newpage
\section{}\label{mcxviii}\newpage
\section{}\label{mcxix}\newpage
\section{}\label{mcxx}\newpage
\section{}\label{mcxxi}\newpage
\section{}\label{mcxxii}\newpage

\setcounter{page}{1234}
\section{}\label{mccxxxiv}\newpage
\section{}\label{mccxxxv}\newpage




\end{document}

相关内容