我正在编辑带有水印的文本,并决定添加索引。一切都很顺利,直到某个时候出现错误消息。经过调试,我找到了问题所在。
当显示多个带有索引的页面时,软件包之间存在一些不兼容性imakeidx
,xwatermark
但并非总是如此。我的意思是,似乎有一个我不知道的事件,当有多个索引页和一定数量的索引时,它会返回错误。我必须这么说,因为有时有两个索引页,但没有出现错误。
错误消息如下:
出了点问题——可能缺少了 \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}
下图显示了结果。