索引 Alpha 页面时出错

索引 Alpha 页面时出错

我正在尝试为自己制作一本食谱书。我希望每个食谱都有一个“页码”,由代表类别(主菜、甜点、饼干等)的字母和一个渐进的不变数字给出,这样我就可以添加食谱,而不必再次打印它们。无论如何,我重新定义了页码计数器(?),一切似乎都很好,但是当我索引一些条目时,索引结果错误,正如您从此示例中看到的那样:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{blindtext}

\usepackage{tabularx,imakeidx,siunitx}

\newcounter{recipe}
\setcounter{recipe}{0}

\renewcommand{\thepage}{\Alph{section}\arabic{recipe}}
\newcommand{\mysection}[1]{
    \newpage
    \setcounter{recipe}{0}
    \section{#1}
}
\newcommand{\recipe}[1]{
    \newpage
    \stepcounter{recipe}
    \subsection{#1}
}
\newcommand{\Index}[1]{
    #1
    \index{#1}
}

\makeindex

\begin{document}

\tableofcontents

\mysection{Antipasti}
\recipe{insalata russa}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{crostini toscani}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\mysection{Primi}
\recipe{gnocchetti primavera}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{lasagne}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{bucatini all'amatriciana}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\printindex

\end{document}

索引应该在每一页(A1、A2、B1、B2、B3)中都报告“farina”和“zucchero”,但你会发现一个有趣的

细长粉,A1,B1;祖凯罗,A2,B2

请注意,这是一个非常非常简单的例子,并且有充分的理由这样做,所以不要试图仅仅建议一种不同的方法(尽管用不同的乳胶方法显然是可以的)。

答案1

Traditionally organised recipes digitised for the younger generation

也许这会给你一个开始。我不确定你打算如何处理食谱前后的页码,所以我预计需要进行调整。

这需要运行两次 ,中间pdflatex运行一次texindy来创建索引。这是因为我不知道如何使用 来调整引用makeindexxindy似乎更灵活。(但请注意,我很少使用索引,所以我当然不是说这是唯一的方法。这只是我在阅读了一堆零碎信息后发现的。)

您需要一个额外的模块,texindy它为食谱定义了一种特殊的类型location。将这些行放在带有扩展名的文件中.xdy。我使用了recipes.xdy

cat recipes.xdy
 (define-location-class "recipes" :var
    ("ALPHA"
     "arabic-numbers"))

无法使用软件包创建此文件filecontents,因为texindy不喜欢插入在顶部的注释行。因此,您需要手动创建。但这只有 3 行代码,所以希望不会有太大问题。要么将其保存在与文档相同的目录中,要么将其安装在某个xindy可以找到它的地方。

我使用命令将imakeidx相关位置信息写入文件.idx。这被包装起来了,\makeatletter ... \makeatother因为它似乎是为软件包作者准备的。

如果你的食谱在myrecipes.tex,要编译,请运行:

pdflatex myrecipes.tex
texindy -M recipes myrecipes.idx
pdflatex myrecipes.tex

以下是代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{blindtext}

\usepackage{tabularx,siunitx}
\usepackage[xindy]{imakeidx}
% put the following lines in recipes.xdy
%   (define-location-class "recipes" :var
%      ("ALPHA"
%       "arabic-numbers"))
% after processing with pdflatex, run texindy -M recipes <jobname>.idx
\usepackage{fancyhdr}
\newcommand{\recipenumbering}{%
  \renewcommand{\thepage}{\Alph{section}\arabic{recipe}}
  \pagestyle{fancy}
  \fancyhf{}
  \renewcommand{\headrulewidth}{0em}
  \fancyhf[cf]{\Alph{section}\arabic{recipe}}
  \fancypagestyle{plain}{%
    \fancyhf{}
    \renewcommand{\headrulewidth}{0em}
    \fancyhf[cf]{\Alph{section}\arabic{recipe}}}}
\newcommand{\prerecipenumbering}{%
  \pagenumbering{roman}
  \pagestyle{fancy}
  \fancyhf{}
  \renewcommand{\headrulewidth}{0em}
  \fancyhf[cf]{\thepage}
  \fancypagestyle{plain}{%
    \fancyhf{}
    \renewcommand{\headrulewidth}{0em}
    \fancyhf[cf]{\thepage}}}
\newcommand{\postrecipenumbering}{%
  \pagenumbering{Roman}
  \pagestyle{fancy}
  \fancyhf{}
  \renewcommand{\headrulewidth}{0em}
  \fancyhf[cf]{\thepage}
  \fancypagestyle{plain}{%
    \fancyhf{}
    \renewcommand{\headrulewidth}{0em}
    \fancyhf[cf]{\thepage}}}

\newcounter{recipe}
\setcounter{recipe}{0}

\newcommand{\mysection}[1]{%
    \newpage
    \setcounter{recipe}{0}
     \section{#1}}
\newcommand{\recipe}[1]{%
    \newpage
    \stepcounter{recipe}
    \subsection{#1}}
\makeatletter
\newcommand{\Index}[1]{%
    #1
   \imki@wrindexentry{\jobname}{#1}{\Alph{section}\arabic{recipe}}}
\makeatother

\makeindex

\begin{document}

\prerecipenumbering
\tableofcontents

\clearpage\recipenumbering

\mysection{Antipasti}
\recipe{insalata russa}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{crostini toscani}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\mysection{Primi}
\recipe{gnocchetti primavera}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{lasagne}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\recipe{bucatini all'amatriciana}
\Index{farina}\\
\Index{zucchero}\\
\blindtext

\clearpage\postrecipenumbering
\printindex

\end{document}

我希望所有年轻一代都能欣赏你的努力!

相关内容