按照如何覆盖 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@
以便更好地整理条目。