![使用 siunitx 套件對二進位單位進行索引](https://rvso.com/image/327774/%E4%BD%BF%E7%94%A8%20siunitx%20%E5%A5%97%E4%BB%B6%E5%B0%8D%E4%BA%8C%E9%80%B2%E4%BD%8D%E5%96%AE%E4%BD%8D%E9%80%B2%E8%A1%8C%E7%B4%A2%E5%BC%95.png)
按照如何覆蓋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@
更好的條目整理功能。