我正在尝试为自己制作一本食谱书。我希望每个食谱都有一个“页码”,由代表类别(主菜、甜点、饼干等)的字母和一个渐进的不变数字给出,这样我就可以添加食谱,而不必再次打印它们。无论如何,我重新定义了页码计数器(?),一切似乎都很好,但是当我索引一些条目时,索引结果错误,正如您从此示例中看到的那样:
\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
也许这会给你一个开始。我不确定你打算如何处理食谱前后的页码,所以我预计需要进行调整。
这需要运行两次 ,中间pdflatex
运行一次texindy
来创建索引。这是因为我不知道如何使用 来调整引用makeindex
。xindy
似乎更灵活。(但请注意,我很少使用索引,所以我当然不是说这是唯一的方法。这只是我在阅读了一堆零碎信息后发现的。)
您需要一个额外的模块,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}
我希望所有年轻一代都能欣赏你的努力!