
postagem original
Abaixo está o código minimamente funcional para um programa no qual estou trabalhando. Meu problema é que quando usei um código mais complicado, ele não indexa automaticamente no final.
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{imakeidx} %allows for multiple indexes
\usepackage{xcolor}
\catcode`"=\active
\def"#1" {\textcolor{white}{#1}} %catcode to color words white, as to hide it on the the compile format
\catcode`@=\active
\def@[#1][#2][#3]@ {#2\index[#1]{$\square$ "#3" #2}} %catcode for FORMULAS that are sent to specific indexes as needed, here I use the catcode for "" in order to hide the letter that will allow for the index to be rearranged. so #3 will denote the order of the index, however it will be invisible to the naked eye on white paper so that the formula indexes are easier to read
%making indexes as needed
% \makeindex[name=NICKNAME, title={INDEX_TITLE},columns=1, intoc]
\makeindex[name=PV, title={Present Value},columns=1, intoc]
\usepackage{lipsum} %creating filler text for demonstration/test purposes
\begin{document}
@[PV][$PV$=summation $\frac{C}{(1+r)^n}$][c]@
\index[PV]{$\square PV = \sum \frac{C}{(1+r)^n}$}
@[PV][$PV = \sum \frac{C}{(1+r)^n}$][b]@
\indexprologue{Present Value is the discounted value, is the value of an expected income stream determined as of the date of valuation}
\printindex[PV]
\end{document}
Quando faço a entrada normal para adicionar algo a um índice, a fórmula complicada aparece de forma semelhante. Isso ainda não é o ideal. Existe uma maneira de definir melhor o \catcode para que eu possa inserir fórmulas mais complicadas no índice?
Código ATUALIZADO
A seguir está o código atualizado com base nas informações de @barbara beeton
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{imakeidx} %allows for multiple indexes
%\usepackage{xcolor} no longer needed
%\catcode`"=\active
%\def"#1" {\textcolor{blue}{#1}} no longer need this as redefined the following catcode
\catcode`"=\active %changed symbol as @ is a seperator in makeidx
\def"[#1][#2][#3]" {#2\index[#1]{#3@$\square$ #2}} %catcode for FORMULAS that are sent to specific indexes as needed, #3 is used to take advantage of the fact that indexes are alphabetical to order the formulas in an organized manor. Ultimately this /catcode is used to print the #2 in the main text AND index #2 into the appropriate index, #1.
%making indexes as needed
% \makeindex[name=NICKNAME, title={INDEX_TITLE},columns=1, intoc]
\makeindex[name=PV, title={Present Value},columns=1, intoc]
\usepackage{lipsum} %creating filler text for demonstration/test purposes
\begin{document}
"[PV][$PV$= summation $\frac{C}{(1+r)^n}$][c]" %appears in index and maintext
\lipsum[2]
"[PV][$PV=\frac{C}{(1+r)^n}$][a]" %appears in index and main text
"[PV][$PV=\sum\frac{C}{(1+r)^n}$][b]" %appears in maintext BUT NOT IN INDEX
%this is what i want to appear in the index using the catcode
%\index[PV]{$\square PV=\sum\frac{C}{(1+r)^n}$}
\indexprologue{Present Value is the discounted value, is the value of an expected income stream determined as of the date of valuation}
\printindex[PV]
\end{document}
Responder1
Então, pelos comentários, @barbara beeton conseguiu encontrar o problema. Estou postando uma resposta para que outros possam encontrar e resolver.
- Erro de sintaxe no código original:
@
já é um separador na\makeidx
redefinição dos\catcode
problemas causados e um código mais complexo do que o necessário.Solução:use " como o símbolo do código de gato
Depois disso, o arquivo seria compilado sem erros, porém ainda haveria fórmula faltando no índice.
SOLUÇÃO
- Primeiro, entenda o que está sendo interpretado nos arquivos de log dos índices.
.ilg
file informará se há algum erro e se há algo sendo ignorado no processo de compilação do índice.Se houver algum erro ou se alguma entrada for rejeitada ou ignorada. vá para a próxima etapa. .idx
mostrará exatamente o que está sendo lido no índice. então abra-o em qualquer leitor de arquivo de texto como o Bloco de Notas. Isso mostrará como sua entrada está sendo traduzida e lida no índice, o que pode ajudá-lo a identificar a parte problemática. No meu caso\sum
estava sendo lido como\DOTSB \sum@ \slimits@
.Se o seu comando estiver sendo transformado em algo descolado, continue para a última etapa\protect
impedirá que o comando seja transformado em outra coisa. Portanto, neste caso, '$\sum\frac$ agora é '\protect\sum \frac' e agora a fórmula complexa aparece no índice como deveria, sem erros. isso também pode ser confirmado observando os arquivos.idx
e ..ilg
CÓDIGO FINAL
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{imakeidx} %allows for multiple indexes
\catcode`"=\active
\def"[#1][#2][#3]" {#2\index[#1]{#3@$\square$ #2}} %catcode for FORMULAS that are sent to specific indexes (defined by #1) as needed. #3 is used to take advantage of the fact that indexes are alphabetical to order the formulas in an organized manor. Ultimately this /catcode is used to automatically print the #2 in the main text AND index #2 into the appropriate index at the same time
%making indexes as needed
% \makeindex[name=NICKNAME, title={INDEX_TITLE},columns=1, intoc]
\makeindex[name=PV, title={Present Value},columns=1, intoc]
\begin{document}
%"[PV][$PV=\sum \frac{C}{(1+r)^n}$][b]" %appeared in maintext BUT NOT IN INDEX
"[PV][$PV=\protect\sum \frac{C}{(1+r)^n}$][b]" %appears in both index and main text
\indexprologue{Present Value is the discounted value, is the value of an expected income stream determined as of the date of valuation}
\printindex[PV]
\end{document}