Hi, In order to trash the need of tex2xindy, I wrote a small package, which provides a new indexing-behavior. By using this package, the index file (.idx) will contain the raw index. The package provides the command \indexindy[<options>]{<Layers>} <options> is a list of one (or more) of the following: attr=<attribute> key is indexed with :attr "<attribute>" open-range " " " " :open-range close-range " " " " :close-range xref=<string-list> " " " " :xref (<string-list") <Layers> is the string-list for the layers in the following syntax <layer0>,<print-key>;<layer1>,<print-key> There are another two commands to generate different location-refs: \newindexstyle{<name>}{<reference>} : define a style \indexstyle{<name>} : select a style Thus, \newindexstyle{chapter}{\thechapter-\thepage} \indexstyle{chapter} will generate a different location reference for the following indices (e.g. 1-5, 2-7, A-6) Examples. -------- The input \indexindy[attr=definition]{Euler} \indexindy[open-range,attr=definition]{Euler,\textsc{Euler}} \indexindy[attr=see,xref="Euler"]{Personen;Mathematiker} \indexindy[close-range,attr=definition]{Euler,\textsc{Euler}} \indexindy{Layer 0;Layer 1,\textsc{Layer 1};Layer 2} \indexstyle{chapter} \indexindy{Index the comma{,} too} leads to the output (assuming random locrefs :) (indexentry :tkey ( ( "Euler" ) ) :attr "definition" :locref "11") (indexentry :tkey ( ( "Euler" "\\textsc{Euler}" ) ) :attr "definition" :open-range :locref "12") (indexentry :tkey ( ( "Personen" ) ( "Mathematiker" ) ) :attr "see" :xref ("Euler")) (indexentry :tkey ( ( "Euler" "\\textsc{Euler}" ) ) :attr "definition" :close-range :locref "17") (indexentry :tkey ( ( "Layer 0" ) ( "Layer 1" "\\textsc{Layer 1}" ) ( "Layer 2" ) ) :locref "11") (indexentry :tkey ( ( "Index the comma{,} too" ) ) :locref "1-11") You should note, that the backslash \ in the input is converted to \\ automatically. But as you see, there are some problems left, which I couldn't solve yet. 1. The input {,} leads to an raw-entry containing {,}. I'd like to convert this to , without the brackets. 2. There is a minor problem on the spacing. I'd like a output like :tkey (("Layer 0") ("Layer 1" "\\textsc{Layer 1}")) 3. The xref-tag is specified in another form than the key-tag. I'd like to use the same syntax, but don't know how to combine keyval.sty with this syntax. 4. Currently the style interferes with LaTeX-\index, since I redefine some internal commands. Anyone there, who think this might cover errors? Thus, the above example leads (using a special .xdy-file for \textsc{}, ...) \begin{theindex} \item \textsc{Euler}, \textbf{11}--\textbf{17} \indexspace \item Index the comma{,} too, 11 \indexspace \item Layer 0 \subitem \textsc{Layer 1} \subsubitem Layer 2, 11 \indexspace \item Personen \subitem Mathematiker, \see{Euler} \end{theindex} Since I am not to deep into TeX, I would be glad if a wizard could check the code, which I will append to this message. So would I, if someone would help me solving the mentioned "problems". Sorry, that the code isn't documented, nor a .dtx-file. But cause this is only a first attemp, I spend the time on the code instead of a documention. Best Regards, Andi ----xindy.sty---- \RequirePackage{keyval} % %% %% various Indexstyles %% % \def\newindexstyle#1#2{\expandafter\gdef\csname xindy@style@#1\endcsname{#2}} \newindexstyle{page}{\thepage} \newindexstyle{chapter}{\thechapter-\thepage} \newindexstyle{section}{\thesection-\thepage} % %% %% select style %% % \def\indexstyle#1{\def\xindy@style{\csname xindy@style@#1\endcsname}} \indexstyle{page} % %% %% Definining the optionl keys %% % \define@key{xindy}{attr}{% \def\xindy@attr{#1}% \ifx\@empty\xindy@attr% \else% \def\xindy@attr{:attr "#1"}% \fi} \def\xindy@attr{} \define@key{xindy}{open-range}[:open-range]{\def\xindy@range{:open-range}} \define@key{xindy}{close-range}[:close-range]{\def\xindy@range{:close-range}} \def\xindy@range{} \define@key{xindy}{xref}{\def\xindy@xref{#1}} \def\xindy@xref{} % %% %% The Backslash should be doubled %% % \begingroup \catcode`\|=0 \catcode`|\=12 |gdef|xindy@bsps{\\} |catcode`|\=|active |global|let\|xindy@bsps |endgroup % %% %% The indexing command %% % \def\indexindy{% \begingroup \toks@{} \ifx\@undefined\germanTeX% \expandafter\indexindy@% \else% \mdqoff\catcode`\\=\active \expandafter\indexindy@% \fi} \newcommand{\indexindy@}[2][]{% \xindy@checksyntax{#2}% \expandafter\def\expandafter\xindy@tmp\expandafter{\the\toks@}% \setkeys{xindy}{#1}% \index{(indexentry :tkey (\xindy@tmp)% \space\xindy@attr\space\xindy@range\space% \ifx\@empty\xindy@xref% :locref "\xindy@style"% \else% :xref (\xindy@xref)% \fi% )} \endgroup } \def\xindy@checksyntax#1{% \def\xindy@tmp{#1}% \xindy@for\xindy@@tmp:=\xindy@tmp\do{\xindy@@checksyntax}} \def\xindy@@checksyntax{% \addto@hook\toks@{ ( }% \@for\xindy@@@tmp:=\xindy@@tmp\do{% \expandafter\addto@hook\expandafter\toks@\expandafter{\expandafter"\xindy@@@tmp" }}% \addto@hook\toks@{) }} % %% %% We need a special for-command %% % \def\xindy@fornoop#1\@@#2#3{} \long\def\xindy@for#1:=#2\do#3{% \expandafter\def\expandafter\xindy@fortmp\expandafter{#2}% \ifx\xindy@fortmp\@empty \else \expandafter\xindy@forloop#2;\@nil;\@nil\@@#1{#3}\fi} \long\def\xindy@forloop#1;#2;#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else #5\def#4{#2}\ifx #4\@nnil \else#5\xindy@iforloop #3\@@#4{#5}\fi\fi} \long\def\xindy@iforloop#1;#2\@@#3#4{\def#3{#1}\ifx #3\@nnil \expandafter\xindy@fornoop \else #4\relax\expandafter\xindy@iforloop\fi#2\@@#3{#4}} \def\xindy@tfor#1:={\xindy@tf@r#1 } \long\def\xindy@tf@r#1#2\do#3{\def\xindy@fortmp{#2}\ifx\xindy@fortmp\space\else \xindy@tforloop#2\@nil\@nil\@@#1{#3}\fi} \long\def\xindy@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil \expandafter\xindy@fornoop \else #4\relax\expandafter\xindy@tforloop\fi#2\@@#3{#4}} \long\def\@breakxindy@tfor#1\@@#2#3{\fi\fi} \def\@wrindex#1{% \protected@write\@indexfile{}% {#1}% \endgroup \@esphack} ---------------