imakeidx 包在使用 \index{} 时使表格失去对齐

imakeidx 包在使用 \index{} 时使表格失去对齐

我的表格对齐得很好,直到我开始尝试向我的书中添加索引。末尾的索引加载正常,但我使用该\index方法的表格失去了垂直对齐。有人能帮忙吗?以下是示例代码和结果

\documentclass{book}
\usepackage[paperwidth=6in, paperheight=9in, margin=0.8in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{imakeidx}
\makeindex
\makeatletter
\patchcmd\chapter{\thispagestyle}{\global\c@footnote\z@\thispagestyle}{}{}
\makeatother
\titleformat{\chapter}{\normalfont\huge}{\thechapter.}{20pt}{\huge\it}
\renewcommand{\chaptermark}[1]{\markboth{}{\sffamily #1}}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\mainmatter
\chapter{Timeline of astronomers and astrologers}
\begin{tabular}{rp{0.4\linewidth}p{0.4\linewidth}}
    \textbf{Year} & \textbf{Original text} & \textbf{Translation} \\
    1990BC & \index{Zoroastres}Zoroastres Bactrianorum Rex & \index{Zoroaster}Zoroaster, king of Bactria \footnotemark \\
    1590BC & \index{Prometheus}Prometheus Atlantis frater & Prometheus, brother of Atlas \\
    1580BC & \index{Atlas}Atlas Rex Mauritaniae & Atlas, King of Mauretania \footnotemark \\\index{Mercury}Mercury the greater \\
\end{tabular}
\printindex
\end{document}

结果图像

在我添加\index命令之前,线条是垂直对齐的,并且不会超出页面的右侧。

答案1

导致此问题的原因在于,在段落(第二/第三列)的开头使用\index(从技术上讲,这不会设置任何内容)。不要使用

\index{<name>}<name>

考虑使用

<name>\index{<name>}

在此处输入图片描述

\documentclass{book}

\usepackage[paperwidth=6in, paperheight=9in, margin=0.8in]{geometry}
\usepackage{imakeidx}
\makeindex

\begin{document}

\chapter{Timeline of astronomers and astrologers}

\begin{tabular}{ r p{0.4\linewidth} p{0.4\linewidth} }
  \textbf{Year} & \textbf{Original text} & \textbf{Translation} \\
         1990BC & Zoroastres\index{Zoroastres} Bactrianorum Rex & Zoroaster\index{Zoroaster}, king of Bactria \footnotemark \\
         1590BC & Prometheus\index{Prometheus} Atlantis frater  & Prometheus, brother of Atlas                              \\
         1580BC & Atlas\index{Atlas} Rex Mauritaniae            & Atlas, King of Mauretania \footnotemark                   \\
                & Mercury\index{Mercury} the greater \\
\end{tabular}

\printindex

\end{document}

在此设置中,这种移位\index不是问题,因为将使tabular内容保持在同一页面上 - 在考虑指向特定页面的索引时,这是必要的。如果您的内容以可能跨越页面边界的段落开头,则使用

\leavevmode\index{<index>}<index> ...

相反。\leavevmode(或仅仅\mbox{})将启动水平模式,以便段落可以开始。

答案2

在某些地方,您将 放在了\index{}错误的列中。另外,不要以 开始列条目,而应将\index{}其放在单词后面。请参阅下面的修订版,tabular该版本现在足够窄,可以放入文本块中。

 % indexprob.tex  SE 606820

\documentclass{book}
\usepackage[paperwidth=6in, paperheight=9in, margin=0.8in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{imakeidx}
\makeindex
\makeatletter
\patchcmd\chapter{\thispagestyle}{\global\c@footnote\z@\thispagestyle}{}{}
\makeatother
\titleformat{\chapter}{\normalfont\huge}{\thechapter.}{20pt}{\huge\it}
\renewcommand{\chaptermark}[1]{\markboth{}{\sffamily #1}}
\begin{document}
%\frontmatter
%\maketitle
%\tableofcontents
\mainmatter
\chapter{Timeline of astronomers and astrologers}
%%%%%%%%%%  PW changes to tabular
\begin{tabular}{rp{0.385\linewidth}p{0.385\linewidth}}
    \textbf{Year} & \textbf{Original text} & \textbf{Translation} \\
    1990BC & Zoroastres\index{Zoroastres} Bactrianorum Rex 
           & Zoroaster\index{Zoroaster}, king of Bactria \footnotemark \\
    1590BC & Prometheus\index{Prometheus} Atlantis frater 
           & Prometheus, brother of Atlas \\
    1580BC & Atlas\index{Atlas} Rex Mauritaniae 
           & Atlas, King of Mauretania \footnotemark \\ 
           & 
           & Mercury\index{Mercury} the greater \\
\end{tabular}
%%%%%%%%%%%% end PW changes

\printindex
\end{document}

在此处输入图片描述

答案3

这里的问题是,默认情况下,LaTeX 将tabular环境视为一个字母(用技术术语来说,它以水平模式排版)。¹您可以通过稍微修改示例来更清楚地看到这一点:

Some words
\begin{tabular}{rp{0.3\linewidth}p{0.3\linewidth}} % ❶
    \textbf{Year} & \textbf{Original text} & \textbf{Translation} \\
    1990BC & \index{Zoroastres}Zoroastres Bactrianorum Rex & \index{Zoroaster}Zoroaster, king of Bactria \footnotemark \\
    1590BC & \index{Prometheus}Prometheus Atlantis frater & Prometheus, brother of Atlas \\
    1580BC & \index{Atlas}Atlas Rex Mauritaniae & Atlas, King of Mauretania \footnotemark \\\index{Mercury}Mercury the greater \\
\end{tabular}
more words

(我还稍微缩小了列数❶,以便更清楚地显示正在发生的事情。

在我的 LaTeX 书中,在介绍之前tabular,我建议用户创建一个新的环境displaytbl来围绕他们的tabular环境。一个可能的定义是:

\NewDocumentEnvironment{displaytbl}{}
   {\begin{center}}
   {\end{center}}

tabular这样您就可以一致地控制文档中 s的格式。例如,您可以在定义\sffamily中添加内容,将所有s 设置为无衬线字体。环境的一个足够聪明的版本还可以重新定义,这样就不需要像在上下文中通常需要的那样将 和分开。\begintabular\footnote\footnotemark\footnotetexttabular

因此,我的建议是将的定义添加displaytbl到您的文档中,然后将您的时间线输出更改为:

\begin{displaytbl}
\begin{tabular}{rp{0.4\linewidth}p{0.4\linewidth}}
    \textbf{Year} & \textbf{Original text} & \textbf{Translation} \\
    1990BC & \index{Zoroastres}Zoroastres Bactrianorum Rex & \index{Zoroaster}Zoroaster, king of Bactria \footnotemark \\
    1590BC & \index{Prometheus}Prometheus Atlantis frater & Prometheus, brother of Atlas \\
    1580BC & \index{Atlas}Atlas Rex Mauritaniae & Atlas, King of Mauretania \footnotemark \\\index{Mercury}Mercury the greater \\
\end{tabular}
\end{displaytbl}

  1. 这可以说是 LaTeX 的一个缺陷,但早就该纠正了。在极少数情况下,你会想要这种行为(例如,将 放在tabular另一个 中tabular),但在大多数情况下,它带来的不便多于帮助。

相关内容