使用 imakeidx 和 xwatermark 时出错

使用 imakeidx 和 xwatermark 时出错

我正在编辑带有水印的文本,并决定添加索引。一切都很顺利,直到某个时候出现错误消息。经过调试,我找到了问题所在。

当显示多个带有索引的页面时,软件包之间存在一些不兼容性imakeidxxwatermark但并非总是如此。我的意思是,似乎有一个我不知道的事件,当有多个索引页和一定数量的索引时,它会返回错误。我必须这么说,因为有时有两个索引页,但没有出现错误。

错误消息如下:

出了点问题——可能缺少了 \item。{\bf P

我检查了生成的文件的行.ind,似乎没有什么问题。所有块都遵循相同的结构。

  \indexspace
{\bf P}\nopagebreak%
 \indexspace\nopagebreak%
  \item p, \hyperpage{1}

如果我将列数更改为多于一,则不会出现任何错误,因为所有索引仅适合一页。这是一个不错的解决方法,但不是通用解决方案。另一种解决方法是防止水印打印在索引页上,方法是将其更改allpages为类似 的内容pages=1-3

以下 MWE 重现了该问题。

\documentclass{article}

\usepackage{imakeidx}
\makeindex[columns=1, options=-s style_file_imakeidx_alfa_01.ist]
% columns=2 works fine, since it doesn't need more than one page

\usepackage{tikz}
\usepackage[printwatermark]{xwatermark}
\newsavebox\myboxr\savebox\myboxr{\tikz[color=red!80,opacity=0.4]\node{\huge{Watermark}};}
\newwatermark[allpages, angle=45, scale=6, xpos=-10, ypos=10]{\usebox\myboxr}
% Another workaround: Don't print wateermark over index. Example: allpages <-> pages=1-3.

\begin{document}
Text.
\clearpage
a\index{a}
\clearpage
b\index{b}

c\index{c}

d\index{d}

e\index{e}

f\index{f}

g\index{g}

h\index{h}

i\index{i}

j\index{j}

k\index{k}

l\index{l}

m\index{m}

n\index{n}

o\index{o}

After letter p, if columns = 1, error. % Something's wrong--perhaps a missing \item. {\bf P

% (Un)comment these lines to change from error/no error when columns = 1
p\index{p}

q\index{q}

r\index{r}

\printindex
\end{document}

这是生成格式化索引列表的文件style_file_imakeidx_alfa_01.ist(我不知道这个设置是否会导致错误)。

quote '+'
headings_flag 1
symhead_positive "Symbol"
numhead_positive "Number"
heading_prefix "{\\bf "
heading_suffix "}\\nopagebreak%\n \\indexspace\\nopagebreak%"
delim_r "~--~"
suffix_2p "\\,f"
suffix_3p "\\,ff"
preamble
"\\markright{Index}\n\n\\begin{theindex}\n\\thispagestyle{headings}\n"
postamble "\n\n\\end{theindex}\n"

当然,我可以继续使用水印或 printindex,但不能同时使用两者,甚至不能限制带有水印的页面。

问题是:知道发生了什么以及如何纠正它? 如果可能的话。

答案1

我听从@Ulrike Fischer埃索一皮克现在水印imakeidx可以与文本一起使用并打印在文本上方(已盖章)。

xwatermark尽管问题背后的原因仍不清楚,但我要说这个解决方案非常好。

以下 MWE 揭示了答案。

\documentclass{article}

\usepackage{lipsum}
\usepackage{imakeidx}
\makeindex[columns=1, columnseprule, options=-s style_file_imakeidx_alfa_01.ist]
% columns=2 works fine, since it doesn't need more than one page

\usepackage{tikz}
\newsavebox\myboxr\savebox\myboxr{\tikz[color=red!80,opacity=0.4]\node{\huge{Watermark}};}

\usepackage{eso-pic}
\AddToShipoutPictureFG{%
  \AtPageCenter{\put(-320,-230){\scalebox{7}{\rotatebox{45}{\usebox\myboxr}}}}%
  \AtStockLowerLeft{\put(0,0){\scalebox{7}{\rotatebox{45}{\usebox\myboxr}}}}%
}

\begin{document}
Text.

\includegraphics{example-image-a}
\clearpage
a\index{a}
\clearpage
b\index{b} c\index{c} d\index{d} e\index{e} f\index{f}
g\index{g} h\index{h} i\index{i} j\index{j} k\index{k}
l\index{l} m\index{m} n\index{n} o\index{o} p\index{p}
q\index{q} r\index{r}

\lipsum[1-2]
\printindex
\end{document}

下图显示了结果。

在此处输入图片描述

在此处输入图片描述

相关内容