Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 17 von 17

Thema: Index, Untereinträge nicht als solchen Darstellen wenn es nur einen gibt

  1. #16
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Zitat Zitat von 0815georg Beitrag anzeigen
    Funktioniert gut, jetzt wäre nur noch Eines ;-)
    und das mittlerweile mit einem leicht ironischem Unterton.
    das heißt ja erstmal nur, daß bisher keiner von uns beiden diesen Fall berücksichtigt hat.
    Zitat Zitat von 0815georg Beitrag anzeigen
    Wenn

    \myindex{tight}[measure]

    und eine (oder mehrere) Seiten später wieder

    \myindex{tight}[measure]

    vorkommt, und sonst kein anderes "tight" im ganzen Dokument, dann sollte

    tight measure, 1, 2

    rauskommen, und nicht

    tight
    ...measure, 1, 2

    wie es zur Zeit noch rauskommt.
    Diese Konstellation macht durchaus Sinn, in meinem Fall zwar nicht mit "tight" und "measure", aber mit anderen Wörtern.
    Ich habs selber probiert hinzukriegen, aber in Tex nur 2 Strings miteinander zu vergleichen ist ja schon eine Wissenschaft für sich, zwei Makros geht gut mit \ifx, aber einen String (der noch Sonderzeichen enthält) mit dem Wert eines Makros, uuuffff...,
    ich hab auch probiert ein zweites Makro zu definieren und das dann mit dem schon bestehenden zu vergleichen, aber das hat natürlich auch nicht funktioniert.
    Warum natürlich? Das wäre hier doch ein möglicher Ansatz?
    Code:
    \documentclass{article}
    \usepackage{makeidx}
    \makeindex
    \newwrite\myout
    \makeatletter
      \InputIfFileExists{\jobname.mix}{}{%
        \typeout{\jobname.mix doesn't exist yet.}%
        \typeout{Another LaTeX run may be required before trying MakeIndex.}%
      }%
      \immediate\openout\myout=\jobname.mix
      \AtEndDocument{\immediate\closeout\myout}%
      \newcommand*\my@index{}
      \newcommand*\my@iindex{}
      \newcommand*\my@tmpa{}
      \newcommand*\my@tmpb{}
      \def\my@iindex#1[#2][#3]{%
        \ifx\relax#2\relax
          \index{#1}%
        \else
          \ifx\relax#3\relax
            \@ifundefined{\detokenize{my@sub@#1}}{%
              \index{#1 #2}%
            }{%
              \index{#1!#2}%
            }%
          \else %
            \@ifundefined{\detokenize{my@ssub@#1@#2}}{%
              \@ifundefined{\detokenize{my@sub@#1}}{%
                \index{#1 #2 #3}%
              }{%
                \index{#1!#2 #3}%
              }%
            }{%
              \@ifundefined{\detokenize{my@sub@#1}}{%
                \index{#1 #2!#3}%
              }{%
                \index{#1!#2!#3}%
              }%
            }%
          \fi
          \@ifundefined{\detokenize{my@ssub@tmp@#1@#2}}{}{%
            \edef\my@tmpa{\@nameuse{\detokenize{my@ssub@tmp@#1@#2}}}%
            \edef\my@tmpb{#3}%
            \ifx\my@tmpa\my@tmpb\relax\else
              \immediate\write\myout{\string\@namedef{\string\detokenize{my@ssub@#1@#2}}{#3}}%
            \fi
          }%
          \global\@namedef{\detokenize{my@ssub@tmp@#1@#2}}{#3}%
        \fi
        \@ifundefined{\detokenize{my@sub@tmp@#1}}{}{%
          \edef\my@tmpa{\@nameuse{\detokenize{my@sub@tmp@#1}}}%
          \edef\my@tmpb{#2}%
          \ifx\my@tmpa\my@tmpb\relax\else
            \immediate\write\myout{\string\@namedef{\string\detokenize{my@sub@#1}}{#2}}%
          \fi
        }%
        \global\@namedef{\detokenize{my@sub@tmp@#1}}{#2}%
      }
      \def\my@index#1[#2]{%
        \@ifnextchar[%]
          {\my@iindex{#1}[#2]}{\my@iindex{#1}[#2][]}%
      }
      \newcommand*\myindex[1]{%
        \@ifnextchar[%]
          {\my@index{#1}}{\my@index{#1}[]}%
      }
    \makeatother
    \begin{document}
    bla\myindex{tight}[measure]
    \myindex{foo}[a]
    \myindex{foo}[b]
    \myindex{blubb}
    \myindex{drei}[zwei][eins]
    \myindex{drei}[zwei][zwei]
    \myindex{vier}[null][nichtig]
    \myindex{x}[y]
    \myindex{x}[y][z]
    \myindex{y}
    \myindex{y}[z]
    \myindex{z}[a][b]
    \myindex{z}[a]
    \myindex{generator}[of a $\sigma$-algebra]
    \myindex{$\alpha$}[$\beta$]
    \myindex{$\alpha$}[$\gamma$]
    \clearpage
    b \myindex{tight}[measure]c
    \printindex
    \end{document}
    Zitat Zitat von 0815georg Beitrag anzeigen
    ...und noch was ist mir grad aufgefallen, nämlich das \myindex eventuell nachfolgende Leerzeichen frisst, was nicht schön ist (\index macht das auch nicht).
    Gibt es eine elegantere Methode das zu vermeiden als {\myindex{.}} zu schreiben?
    zieh das Leerzeichen doch einfach vor den \myindex{.}.
    Du planst ja, dieses Feature in den \index-Aufruf integrieren zu lassen. Darin müsste man eh die A!B-Schreibweise berücksichtigen, sprich: das Problem mit dem Leerzeichenverschlucken stellt sich dann gar nicht erst.

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  2. #17
    Registrierter Benutzer
    Registriert seit
    18.04.2013
    Beiträge
    9
    Hallo,

    nun ja, dass es dir gelingt das hinzukriegen, daran habe ich ja nicht gezweifelt, wenn man dagegen kein so erfahrener Tex Coder ist, dann ist die Wahrscheinlichkeit dass mit den ersten drei Versuchen hinzubekommen praktisch gleich 0.

    Also das wars dann vorerst mal, wie es ausschaut hab ich Moment keine weiteren Wünsche.

    Vielen Dank für deine großartige Hilfe, bin dann auch schon gespannt was die Autoren von makeidx davon halten werden. Hängt natürlich immer davon ab wie man das ganze präsentiert, es lohnt sich also etwas Mühe reinzustecken um sinnvolle Anwendungsfälle schön darzustellen, deshalb kann ich das erst in ein paar Monaten machen, wenn ich mehr Zeit hab.

    Georg

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •