imakeidx 与 \renewcommand{\thepage} 不兼容

imakeidx 与 \renewcommand{\thepage} 不兼容

我正在用 LaTeX 编写一份长文档,并用它imakeidx来索引内容。所有工作都找到了。我正在 xelatex 中进行编译,当我使用以下命令时:

\renewcommand{\thepage}{{\arabic{page}}\hfill{\roman{page}}}

像这样:

\chapter{{First chapter}}
\renewcommand{\thepage}{{\arabic{page}}\hfill{\roman{page}}}
 \setcounter{page}{1}

然后索引就停止工作。

我花了很长时间才弄清楚这是问题所在......这很好,因为我设法清理了我实际上没有使用的包的序言。

有人能告诉我为什么会出现不兼容的情况吗?提前谢谢

帮助理解的版本下一个代码生成索引

% !TEX encoding = UTF-8 Unicode
%!TEX program = xelatex
\documentclass{book} % \documentclass es lo primero que se pone en un documento de latex. Este comando me sirve para decirle a latex si lo que estoy haciendo es un libro, un reporte, un artículo, etc.

\usepackage[utf8]{inputenc} 
\usepackage{imakeidx} 
\usepackage[colorlinks,linkcolor=blue,urlcolor=blue,citecolor=blue,hyperindex]{hyperref}
\usepackage{blindtext}

\author{Autor 1\\[1cm]{\small Boos: Boos2}}
\title{My document}
\date{\today}
\makeindex 
\begin{document}
\maketitle
\chapter{Teoric}
\index{scientific}  \index{dynamic!system}  \index{economic!system}  \index{music}.
\blindtext
\begin{equation}
3+2=5
\end{equation}

\printindex
 
\end{document}

下一个代码不会产生索引

% !TEX encoding = UTF-8 Unicode
%!TEX program = xelatex
\documentclass{book} % \documentclass es lo primero que se pone en un documento de latex. Este comando me sirve para decirle a latex si lo que estoy haciendo es un libro, un reporte, un artículo, etc.

\usepackage[utf8]{inputenc} 
\usepackage{imakeidx} 
\usepackage[colorlinks,linkcolor=blue,urlcolor=blue,citecolor=blue,hyperindex]{hyperref}
\usepackage{blindtext}

\author{Autor 1\\[1cm]{\small Boos: Boos2}}
\title{My document}
\date{\today}
\makeindex 

\begin{document}
\maketitle


\chapter{Teoric}
\renewcommand{\thepage}{{\arabic{page}}\hfill{\roman{page}}}
\index{scientific}  \index{dynamic!system}  \index{economic!system}  \index{music}.
\blindtext
\begin{equation}
3+2=5
\end{equation}

\printindex
 
\end{document}

唯一的区别是

\renewcommand{\thepage}{{\arabic{page}}\hfill{\roman{page}}}

第一个代码在页面中不包含印度阿拉伯数字和罗马数字,但它可以制作带有 的索引\printindex。第二个代码不打印带有 的索引\printindex,但它包含印度阿拉伯数字和罗马数字。

这就是我为什么要停止工作。

答案1

两次打印\thepage页码将导致\pageref(以及类似的构造,如目录和表格列表)变得不可用。

大概的意图是让页面头部有阿拉伯语和拉丁语形式(虽然这也相当不寻常),可以直接指定而不需要重新定义\thepage

\documentclass{book} % \documentclass es lo primero que se pone en un documento de latex. Este comando me sirve para decirle a latex si lo que estoy haciendo es un libro, un reporte, un artículo, etc.

\usepackage[utf8]{inputenc} 
\usepackage{imakeidx} 
\usepackage[colorlinks,linkcolor=blue,urlcolor=blue,citecolor=blue,hyperindex]{hyperref}
\usepackage{blindtext}

\author{Autor 1\\[1cm]{\small Boos: Boos2}}
\title{My document}
\date{\today}
\makeindex 
\renewcommand{\thepage}{\arabic{page}}
\newcommand{\thepagetwice}{\arabic{page}\hfill\roman{page}}

\makeatletter
\def\@evenhead{\thepagetwice\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepagetwice}%
\makeatother
\begin{document}
\maketitle

\tableofcontents

\chapter{Teoric}

\index{scientific}  \index{dynamic!system}  \index{economic!system}  \index{music}.
\blindtext
\begin{equation}
3+2=5
\end{equation}

\printindex
 
\end{document}

页面头部有重复的数字

在此处输入图片描述

以及可用的索引

在此处输入图片描述

答案2

它什么时候\index做它的工作,它写出一行形式

\indexentry{scientific|hyperpage}{5}

最后一个支撑组必须包含一个数字(以任何支持的格式)。 在你的情况下,它将包含{5\hfill v}非法的。

这似乎有效,但我认为你应该重新考虑这个问题并以不同的方式解决它:你会收到许多警告。

哦,链接根本就不起作用。不过那是另外一个故事了。

\documentclass{book}

\usepackage[utf8]{inputenc} 
\usepackage{imakeidx}
\usepackage{xpatch}
\usepackage[colorlinks,linkcolor=blue,urlcolor=blue,citecolor=blue,hyperindex]{hyperref}
\usepackage{blindtext}

\author{Autor 1\\[1cm]{\small Boos: Boos2}}
\title{My document}
\date{\today}

\renewcommand{\thepage}{\arabic{page}\hfill\roman{page}}

\makeatletter
\xpatchcmd\HyInd@org@wrindex{\thepage}{\arabic{page}}{}{}
\makeatother

\NewCommandCopy{\hyperpageoriginal}{\hyperpage}
\renewcommand{\hyperpage}[1]{%
  \hyperpageoriginal{#1\ \romannumeral#1}%
}

\makeindex 

\begin{document}

\maketitle

\tableofcontents

\chapter{Teoric}
\section{whatever}
\index{scientific}  \index{dynamic!system}  \index{economic!system}  \index{music}.
\blindtext
\begin{equation}
3+2=5
\end{equation}

\printindex
 
\end{document}

相关内容