The scanning of an optional argument (in brackets, [
and ]
) works in a slight different way than the scanning of a mandatory argument (in braces, {
and }
); TeX counts the braces, but doesn't do the same for brackets. So, with your input, the optional argument that is seen is
\protect\cite[page
that is, everything from [
to the first ]
(which is balanced with respect to braces). In order to avoid this problem, brackets inside an optional argument must be "masked" with braces:
\caption[{\protect\cite[page]{book}}]{other text}
The argument cannot have unbalanced braces, so the bracket after page
doesn't end it, in this case.
I managed to solve the "problem" as it turned out not to be problem at all.
As already stated in the question, removing the twoside
option resulted in the MWE functioning again. At first I didn't realise this, but as the book
documentclass has by default the layout set as two-sided! So including it doesn't add anything, but more importantly, removing the statement doesn't change anything either!
In essence, the fix in the question was already the answer, but it is a mystery why the explicit statement of a default setting would result in these error messages.
I then did some further testing with classes that do not as a default have the twoside
option enabled such as the article
class. Without any statement (so default, oneside
) the effect is as desired and doesn't give any error messages. However, when the option twoside
is passed it again results in errors.
In summary, it would seem that the fltpage
and caption
packages are incompatible when used in a documentclass that:
a. has not, by default, a twoside
layout; and a twoside
layout is required and therefore passed as an option; or
b. has by default a twoside
layout but this is also given as a statement when devining the documentclass.
My question related to the second option and is therefore answered, remove the optional mentioning of the twoside
option. The issue remains for people wanting to use it in other documentclasses such as article
, in combination with twoside
layout.
Best Answer
\protect
does not take a{}
argument: it must immediately precede the token it is protecting so