我的表格对齐得很好,直到我开始尝试向我的书中添加索引。末尾的索引加载正常,但我使用该\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 设置为无衬线字体。环境的一个足够聪明的版本还可以重新定义,这样就不需要像在上下文中通常需要的那样将 和分开。\begin
tabular
\footnote
\footnotemark
\footnotetext
tabular
因此,我的建议是将的定义添加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}
- 这可以说是 LaTeX 的一个缺陷,但早就该纠正了。在极少数情况下,你会想要这种行为(例如,将 放在
tabular
另一个 中tabular
),但在大多数情况下,它带来的不便多于帮助。