Indexación con unidades binarias usando el paquete siunitx

Indexación con unidades binarias usando el paquete siunitx

segúnCómo sobrescribir los prefijos binarios de siunitx, cualquier cambio en los prefijos binarios debe aplazarse para serdespués \begin{document}. Sin embargo, parece que si estoy usando esos mismos prefijos binarios en el índice, necesito repetir las mismas declaraciones en el preámbulo. Tratando de determinar cuál es la forma correcta de abordar este tema y no tener que repetir las mismas declaraciones.

Para ver el problema comente la línea indicada por

< ---- This needs to be repeated

Si, por el contrario, \AtBeginDocumentse elimina la declaración, la unidad bitya no se muestra en rojo.

Notas:

  • Tengo varios otros problemas con el contenido matemático en el último parámetro \AddIndexEntryy estoy bastante seguro de que está relacionado con la "robustificación"/expansión, por lo que si es obvio en este ejemplo, me ahorrará tiempo al publicar más preguntas similares. Esta pregunta específica se distingue porque está específicamente relacionada con siunitxlos prefijos binarios y.

Código:

\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}

Respuesta1

Como siempre, es un problema de expansión; cuando ocurre la escritura, el error es que \bitno está definido, lo cual no lo está a menos que estemos procesando \sio \SI.

No estoy seguro de por qué parece que es necesario exigir la declaración también en el preámbulo, pero obtendrá una mejor configuración si evita expandir la entrada del índice.

\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}

Tenga en cuenta que lo hice \FormatIndexEntryrobusto y también lo agregué #3@para una mejor clasificación de la entrada.

ingrese la descripción de la imagen aquí

información relacionada