siunitx パッケージを使用したバイナリ単位のインデックス作成

siunitx パッケージを使用したバイナリ単位のインデックス作成

に従ってsiunitxのバイナリプレフィックスを上書きする方法バイナリプレフィックスの変更は延期する必要があります。 \begin{document}ただし、インデックスで同じバイナリ プレフィックスを使用している場合は、プリアンブルで同じ宣言を繰り返す必要があるようです。この問題に対処し、同じ宣言を繰り返さなくても済むようにするための正しい方法を特定しようとしています。

問題を確認するには、

< ---- This needs to be repeated

代わりに\AtBeginDocument宣言が削除されると、ユニットはbit赤色で表示されなくなります。

ノート:

  • の最後のパラメータの数学的内容に関して\AddIndexEntry、他にもいくつか問題があります。これは「堅牢化」/拡張に関連していると確信しています。したがって、この例から明らかであれば、同様の質問を投稿する時間を節約できます。この特定の質問は、siunitxおよびバイナリ プレフィックスに特に関連しているという点で独特です。

コード:

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

答え1

いつものように、これは拡張の問題です。書き込みが発生すると、 が定義されていないというエラーが発生しますが、または を\bit処理しているのでない限り、これは定義されていません。\si\SI

なぜプリアンブルでも宣言が必要なのかはわかりませんが、インデックス エントリの展開を避ければ、より良い設定が得られます。

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

エントリの照合を改善するために\FormatIndexEntry堅牢性を高め、追加したことに注意してください。#3@

ここに画像の説明を入力してください

関連情報