インデックス (\printindex) を特定の方法でフォーマットするにはどうすればよいですか?

インデックス (\printindex) を特定の方法でフォーマットするにはどうすればよいですか?

あなたの助けが必要です! ここに画像の説明を入力してください

作り方はこんな感じです:

\begin{filecontents*}{Idx.ist}
headings_flag 1
heading_prefix "{\\hrulefill  \n \n \\textbf{"
heading_suffix "}} \\nopagebreak"

delim_0 "\n\n  \\item  "

group_skip "\n\n \\hrulefill"
\end{filecontents*}
\documentclass[8.5pt twoside, a4paper]{book} 
\let\cleardoublepage\clearpage
\usepackage[T1]{fontenc}
\usepackage[german]{babel} 
\usepackage[utf8]{inputenc} 

\usepackage[scaled]{uarial} 
\renewcommand{\familydefault}{\sfdefault}
\usepackage{multicol}

\usepackage{titlesec}

\usepackage{imakeidx} 


\usepackage{hyperref}

\makeindex[options=-s Idx.ist]

\makeatletter
\let\mygobble\@gobble
\LetLtxMacro\OldIndex\index
\renewcommand{\index}[1]{\OldIndex{#1|mygobble}} 
\makeatother

\begin{document}
\chapter{Test}
Irgendein Text.
\section{Eins}
Blablabla.
\subsection{Regeln}
\index{Ausland}
\index{Sieger}
\index{Spieler}
\index{Spielfeld}
\subsection{Beschäftigung}
\index{Beruf}
\index{Arbeit}
\vfill
\pagebreak

\addcontentsline{toc}{section}{\textbf{Stichwortverzeichnis}}
\renewcommand{\indexname}{Stichwortverzeichnis}
\fontsize{7.5pt}{0pt}
\printindex 

\end{document}

編集: セクション番号と末尾の線は正常に機能しました。ありがとうございます。
ただし、インデントは機能しません。\struntbox機能しません。

編集 2.0: インデックスがさらにある場合、アルファベット文字の「グループ」内で列区切りが発生します。これを回避するにはどうすればよいですか?

3 回目の編集: グループの後に追加の行/行が必要であることに気付きました。次のようになります。 ここに画像の説明を入力してください

このような行/線を追加するにはどうすればよいでしょうか?

答え1

索引にページ番号が必要な場合は、 の再定義でページ番号を削除しないでください\index。 を少し変更し、定義をいくつか追加することで、書式設定を行うことができますIdx.ist

\RequirePackage{filecontents}
\begin{filecontents*}{Idx.ist}
headings_flag 1
heading_prefix "\\indexheading{"
heading_suffix "}"

delim_0 "\\hfill"

group_skip "\n"
preamble "\\begin{theindex}\\starttheindex"
postamble "\n\\stoptheindex\\end{theindex}"
\end{filecontents*}
\documentclass[8.5pt,% book does not know this option (but don't forget the comma!)
  twoside,% this is default
  openany,% so usually you do not need \let\cleardoublepage\clearpage
  a4paper]{book} 
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel} % use new spelling instead of old
\usepackage[utf8]{inputenc} 

%\usepackage[scaled]{uarial}% uarial is a very ugly mix of Arial and Helvetica 
\renewcommand{\familydefault}{\sfdefault}
\usepackage{multicol}

\usepackage{titlesec}

\usepackage{imakeidx} 


\usepackage{hyperref}

\makeindex[options=-s Idx.ist]

% If you do not want page numbers but, e.g. subsection numbers in the index:
%\LetLtxMacro\OldIndex\index
%\newcommand*{\indexpage}[2]{#1}
%\renewcommand{\index}[1]{\OldIndex{#1|indexpage{\thesubsection}}} 
\newcommand*{\indexheading}[1]{%
  \indexrule
  \textbf{#1}\par
  \nopagebreak
  \vskip-\baselineskip% go back to the heading line
}
\newcommand*{\indexrule}{%
  \par\nopagebreak
  \vskip-\ht\strutbox
  \hrulefill\par\pagebreak[3]
  \vskip -\baselineskip
  \hrulefill\par\nobreak
}
\newcommand*{\starttheindex}{\raggedcolumns}
\newcommand*{\stoptheindex}{\indexrule}
\makeatletter
\renewcommand*{\@idxitem}{\par\hangindent 2em\hskip 1.5em}% indent the entry
\makeatother

\begin{document}
\chapter{Test}
Irgendein Text.
\section{Eins}
Blablabla.
\subsection{Regeln}
\index{Ausland}
\index{Sieger}
\index{Spieler}
\index{Spielfeld}
\subsection{Beschäftigung}
\index{Beruf}
\index{Arbeit}
\vfill
\clearpage% should be used before \addcontentsline

\addcontentsline{toc}{chapter}{Stichwortverzeichnis}% the index is a chapter and becomes the font for chapter entries that is already bold
\renewcommand{\indexname}{Stichwortverzeichnis}
\fontsize{7.5pt}{0pt}
\printindex 

\end{document}

ページ番号付き索引

%前の

\LetLtxMacro\OldIndex\index
\newcommand*{\indexpage}[2]{#1}
\renewcommand{\index}[1]{\OldIndex{#1|indexpage{\thesubsection}}} 

次のようなものが手に入ります:

サブセクション番号付き索引

\nopagebreakグループ内での列区切りを避けるには、 の定義に を追加します\@idxitem

\RequirePackage{filecontents}
\begin{filecontents*}{Idx.ist}
headings_flag 1
heading_prefix "\\indexheading{"
heading_suffix "}"

delim_0 "\\hfill"

group_skip "\n"
preamble "\\begin{theindex}\\starttheindex"
postamble "\n\\stoptheindex\\end{theindex}"
\end{filecontents*}
\documentclass[8.5pt,% book does not know this option (but don't forget the comma!)
  twoside,% this is default
  openany,% so usually you do not need \let\cleardoublepage\clearpage
  a4paper]{book} 
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel} % use new spelling instead of old
\usepackage[utf8]{inputenc} 

%\usepackage[scaled]{uarial}% uarial is a very ugly mix of Arial and Helvetica 
\renewcommand{\familydefault}{\sfdefault}
\usepackage{multicol}

\usepackage{titlesec}

\usepackage{imakeidx} 


\usepackage{hyperref}

\makeindex[options=-s Idx.ist]

% If you do not want page numbers but, e.g. subsection numbers in the index:
%\LetLtxMacro\OldIndex\index
%\newcommand*{\indexpage}[2]{#1}
%\renewcommand{\index}[1]{\OldIndex{#1|indexpage{\thesubsection}}} 
\newcommand*{\indexheading}[1]{%
  \indexrule
  \textbf{#1}\par
  \nopagebreak
  \vskip-\baselineskip% go back to the heading line
}
\newcommand*{\indexrule}{%
  \par\nopagebreak
  \vskip-\ht\strutbox
  \hrulefill\par\pagebreak[3]
  \vskip -\baselineskip
  \hrulefill\par\nobreak
}
\newcommand*{\starttheindex}{\raggedcolumns}
\newcommand*{\stoptheindex}{\indexrule}
\makeatletter
\renewcommand*{\@idxitem}{\par\nopagebreak\hangindent 2em\hskip 1.5em}% indent the entry
\makeatother

\begin{document}
\chapter{Test}
Irgendein Text.
\section{Eins}
Blablabla.
\subsection{Regeln}
\index{Ausland}
\index{Sieger}
\index{Spieler}
\index{Spielfeld}
\subsection{Beschäftigung}
\index{Beruf}
\index{Arbeit}
\index{Test1}\index{Test2}\index{Test3}\index{Test4}\index{Test5}
\index{Test6}\index{Test7}\index{Test8}\index{Test9}\index{Test10}
\vfill
\clearpage% should be used before \addcontentsline

\addcontentsline{toc}{chapter}{Stichwortverzeichnis}% the index is a chapter and becomes the font for chapter entries that is already bold
\renewcommand{\indexname}{Stichwortverzeichnis}
\fontsize{7.5pt}{0pt}
\printindex 

\end{document}

ただし、グループが列の高さより大きい場合は列がいっぱいになってしまうため、これはお勧めしません。

罫線の上の垂直距離を変更するには、線を変更するだけです

  \vskip-\ht\strutbox

の定義において\indexrule、例えば、

\newcommand*{\indexrule}{%
  \par\nopagebreak
  \vskip\dp\strutbox\nopagebreak
  \hrulefill\par\pagebreak[3]
  \vskip -\baselineskip
  \hrulefill\par\nobreak
}

結果として

行の前に隙間がある

醜い URW-Arial がインストールされていないため、別のフォントを使用していることに注意してください。

コードに追加したいくつかのメモも確認してください。

関連情報