Indexar automaticamente fórmulas complicadas com catcode

Indexar automaticamente fórmulas complicadas com catcode

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 \makeidxredefinição dos \catcodeproblemas 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

  1. Primeiro, entenda o que está sendo interpretado nos arquivos de log dos índices. .ilgfile 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.
  2. .idxmostrará 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 \sumestava sendo lido como \DOTSB \sum@ \slimits@.Se o seu comando estiver sendo transformado em algo descolado, continue para a última etapa
  3. \protectimpedirá 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 .idxe ..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}

informação relacionada