索引所有初始词和非初始词

索引所有初始词和非初始词

请节省您的时间和精力来解决这个问题,我们提供了一个可能的解决方案。

我找到了一本书,里面有两个有趣的索引。它列出了泰米尔谚语,书中索引了谚语的所有首字母(第一个索引)和所有其他单词(第二个索引)。我们如何在 TeX 中实现这一点?我附上了一个初始 TeX 文件。

在这个例子中,我们应该在第一个索引中获得aHelloHow术语,并在第二个索引中获得所有其他谚语术语。请注意,逗号、分号等符号不应成为索引的一部分。

% run: *latex mal-indexall-question.tex
\documentclass[a4paper]{article}
\usepackage[noautomatic]{imakeidx}
\indexsetup{firstpagestyle=empty}
\makeindex[name=initial, title=Initial words, columns=3]
\makeindex[name=noninitial, title=Non-initial words, columns=3]
\usepackage[colorlinks]{hyperref}
\begin{document}
\let\indexall=\index % To be changed...
Text before.\indexall{a," [b;] c: r: s: t; {d.}/ (e!) f? g| h¡ i¿}
Text in the middle.\indexall{Hello World!} 
Text\indexall{How are you?} after.
\printindex[initial]
\printindex[noninitial]
\end{document}

mwe,问题

答案1

我正在使用 Lua 即时解决此任务,因此我的解决方案仅限于 LuaTeX。这可能不是最好的方法。我正在使用一个新命令\indexall,将其参数传递给 Lua 函数indexall

该函数删除文本块中的特殊字符,并用空格将其内容分开。第一个词保存到第一个索引,所有其他词保存到第二个索引。我们运行以下几行:

lualatex mal-indexall.tex
xindy -M texindy -L general -C utf8 initial.idx
xindy -M texindy -L general -C utf8 noninitial.idx
lualatex mal-indexall.tex

我附上了一个示例和 PDF 文件的预览。

% run: lualatex mal-indexall.tex
\batchmode % Less information to the terminal, please...
\documentclass[a4paper]{article}
\usepackage[noautomatic]{imakeidx}
\indexsetup{firstpagestyle=empty}
\makeindex[name=initial, title=Initial words, columns=3]
\makeindex[name=noninitial, title=Non-initial words, columns=3]
\usepackage[colorlinks]{hyperref}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
-- List of characters to be deleted...
local deletethese={ ",", ";", ":", "%.", "!", "?", "\"", "%(", "%)", "%[", "%]", "{", "}", "/", "|", "¡", "¿" }
-- The core of this TeX file...
function indexall(text)
local c=0 -- a word counter
local textnew=text -- backup of original text
print("Processing "..text.." ...")
-- Deleting unnecessary signs...
for _, letter in ipairs(deletethese) do
  -- print(letter)
  textnew=string.gsub(textnew,letter,"")
end -- of for
--print(textnew)
-- Use space and separate index terms...
for indexword in string.gmatch(textnew, "([^ ]+)") do
  c=c+1
  if c==1 then
    tex.sprint("\\index[initial]{"..indexword.."}")
      else
    tex.sprint("\\index[noninitial]{"..indexword.."}")
  end
end
end -- of function indexall
\end{luacode*}
\def\indexall#1{\directlua{indexall([[#1]])}}
\scrollmode
Text before.\indexall{a," [b;] c: r: s: t; {d.}/ (e!) f? g| h¡ i¿}
Text in the middle.\indexall{Hello World!} 
Text\indexall{How are you?} after.
\printindex[initial]
\printindex[noninitial]
\batchmode
\end{document}

姆韦

相关内容