Indizierung mit binären Einheiten unter Verwendung des siunitx-Pakets

Indizierung mit binären Einheiten unter Verwendung des siunitx-Pakets

GemäßSo überschreiben Sie die binären Präfixe von siunitx, müssen alle Änderungen an den binären Präfixen aufgeschoben werden, umnach \begin{document}. Es scheint jedoch, dass ich, wenn ich dieselben binären Präfixe im Index verwende, dieselben Deklarationen in der Präambel wiederholen muss. Ich versuche herauszufinden, wie ich mit diesem Problem richtig umgehen kann, ohne dieselben Deklarationen wiederholen zu müssen.

Um das Problem zu sehen, kommentieren Sie die Zeile aus, die mit

< ---- This needs to be repeated

Wird die \AtBeginDocumentDeklaration hingegen entfernt, bitwird die Einheit nicht mehr rot dargestellt.

Anmerkungen:

  • Ich habe mehrere andere Probleme mit dem mathematischen Inhalt im letzten Parameter von \AddIndexEntryund bin mir ziemlich sicher, dass es mit „Robustifizierung“/Erweiterung zusammenhängt. Wenn es also aus diesem Beispiel offensichtlich ist, spart es mir Zeit, weitere ähnliche Fragen zu stellen. Diese spezielle Frage ist insofern einzigartig, als sie speziell mit siunitxund binären Präfixen zusammenhängt.

Code:

\documentclass{article}
\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{siunitx}
\usepackage{xcolor}
\usepackage{hyperref}

\newcommand*\lettergroup[1]{\subsection{#1}}

\newcommand*{\IndexWithName}[2]{%
    % #1 = word to index
    % #2 = index name
    \index[#2]{#1}%
}%

\newcommand*{\FormatIndexEntry}[2]{%
    \textcolor{blue}{#1} #2%
}%


%% Defer the binary units until AFTER \begin{document} as per
%% https://tex.stackexchange.com/questions/287579/how-to-overwrite-siunitxs-binary-prefixes
\sisetup{binary-units=true}%  
\AtBeginDocument{%
    \DeclareSIUnit\bit{\textcolor{red}{bit}}%
}
\DeclareSIUnit\bit{\textcolor{red}{bit}}% < ---- This needs to be repeated

\NewDocumentCommand{\AddIndexEntry}{%
    O{}% #1 = index name
      m% #2 = word to index this under
      m% #3 = indexed term
      m% #4 = symbol
}{%
    \expandafter\IndexWithName\expandafter{%
        #2!\FormatIndexEntry{#3}{#4}%
    }{#1}%
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}

\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,program=texindy,name=Name]
\indexsetup{level=\section}

\begin{document}
\SI{1}{\bit}
\AddIndexEntry[Name]{Bytes}{Bit}{symbol: $\si{\bit}$}

\clearpage 
\setcounter{secnumdepth}{0}
\printindex[Name]
\end{document}

Antwort1

Wie üblich handelt es sich um ein Erweiterungsproblem. Beim Schreiben wird der Fehler angezeigt, dass \bitnicht definiert ist. Dies ist nicht der Fall, sofern wir nicht gerade \sioder verarbeiten \SI.

Ich bin nicht sicher, warum die Deklaration auch in der Präambel erforderlich sein muss, aber Sie erhalten eine bessere Konfiguration, wenn Sie die Erweiterung des Indexeintrags vermeiden.

\documentclass{article}
\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{siunitx}
\usepackage{xcolor}
\usepackage{hyperref}

\newcommand*\lettergroup[1]{\subsection{#1}}

\newcommand*{\IndexWithName}[2]{%
    % #1 = word to index
    % #2 = index name
    \index[#2]{#1}%
}

\NewDocumentCommand{\FormatIndexEntry}{mm}{%
    \textcolor{blue}{#1} #2%
}


%% Defer the binary units until AFTER \begin{document} as per
%% http://tex.stackexchange.com/questions/287579/how-to-overwrite-siunitxs-binary-prefixes
\sisetup{binary-units=true}
\AtBeginDocument{%
    \DeclareSIUnit\bit{\textcolor{red}{bit}}%
}

\NewDocumentCommand{\AddIndexEntry}{%
    O{}% #1 = index name
      m% #2 = word to index this under
      m% #3 = indexed term
      m% #4 = symbol
}{%
    \expandafter\IndexWithName\expandafter{%
        #2!#3@\FormatIndexEntry{#3}{\unexpanded{\unexpanded{#4}}}%
    }{#1}%
}
\newcommand{\indexopt}[2]{\index[#2]{#1}}

\makeindex[title={Main Index},columns=1,program=texindy]
\makeindex[title={Name Index},columns=1,program=texindy,name=Name]
\indexsetup{level=\section}

\begin{document}

\SI{1}{\bit}

\AddIndexEntry[Name]{Bytes}{Bit}{symbol: \si{\bit}}

\clearpage 
\setcounter{secnumdepth}{0}
\printindex[Name]
\end{document}

Beachten Sie, dass ich es \FormatIndexEntryrobust gemacht und auch #3@für eine bessere Sortierung des Eintrags gesorgt habe.

Bildbeschreibung hier eingeben

verwandte Informationen