我正在写一份双面文档,有边距(基于考布克级) 并想在前言中添加一个图片。但是,在添加带标题的图片时,编译器会抛出“未定义的控制序列”错误,声称不知道环境中的基本命令figure
。
我设法将问题追溯到floatrow
软件包,该软件包要求facing
启用该选项,因为文档是双面的(否则,标题将始终位于图片的同一侧,但它们需要根据奇数页或偶数页进行交换)。因此,此选项必须保留。
奇怪的是,我还注意到,如果手动将pagenumbering
设置为arabic
在图形环境之前或之内,问题就解决了。但不幸的是,我想将编号改为罗马数字,而将其roman
立即改回图形环境之后则不起作用。(删除标题也可以,但这当然也不是一种选择。)
以下是 MWE:
\documentclass{scrbook}
\usepackage{graphicx}
\usepackage{floatrow}
\floatsetup[figure]{% Captions for figures
facing=yes,%
margins=hangright,% Put captions in the margins
capposition=beside,%
capbesideposition={bottom,right},%
capbesideframe=yes,%
capbesidewidth=\marginparwidth,% Width of the caption equal to the width of the margin
floatwidth=\textwidth,% Width of the figure equal to the width of the text
}%
\begin{document}
\frontmatter
\begin{figure}[hb]
% \pagenumbering{arabic}
\centering
\includegraphics[width=\textwidth]{example-image-a}
\caption{It's the letter A.}
\label{fig:sample_image}
\end{figure}
\end{document}
答案1
这将创建一个新的计数器,abspage
以便\thepage
完全避免。它还使用辅助文件来确定浮动结束在哪个页面上。
不知道你为什么要使用 [hb],但它确实有效。请注意,这\clearpage
会将队列中所有浮点数变为 [p]。
用于将或\hfill
放置在文本区域的右边缘。它还会将图像推到左边缘。您可以使用或来代替。\rlap
\llap
\centering
\hspace*{\fill}
\makebox[\textwidth]{...}
\documentclass{book}
\usepackage[export]{adjustbox}% for valign
\usepackage{graphicx}
\usepackage{lipsum}% random text
\usepackage{showframe}% alignment tool
\def\bottomfraction{0.7}% default is 0.3
\newcounter{abspage}
\setcounter{abspage}{1}
\AddToHook{shipout/after}{\stepcounter{abspage}}
\newcommand{\MCright}[2][c]{% #1=t, c or b (optional), #2=\caption{...}
\hfill\rlap{\hskip\marginparsep
\begin{minipage}[#1]{\marginparwidth}
\vskip-\abovecaptionskip
#2
\vskip-\belowcaptionskip
\hrule height0pt
\end{minipage}}}
\newcommand{\MCleft}[2][c]{% #1=t, c or b (optional), #2=\caption{...}
\hfill\llap{\begin{minipage}[#1]{\marginparwidth}
\vskip-\abovecaptionskip
#2
\vskip-\belowcaptionskip
\hrule height0pt
\end{minipage}\hskip\marginparsep\hskip\textwidth}
\newcounter{MCindex}
\renewcommand{\theMCindex}{\roman{MCindex}}
\makeatletter
\newcommand{\margincaption}[2][c]{% #!=t,c or b (optional), #2=\caption{...}
\stepcounter{MCindex}%
\protected@write{\@auxout}{\let\theabspage\relax}%
{\string\gdef\string\MCpage\theMCindex{\theabspage}}%
\@ifundefined{MCpage\theMCindex}%
{\ifodd\value{abspage} \MCright[#1]{#2}%
\else \MCleft[#1]{#2}\fi}%
{\ifodd\csname MCpage\theMCindex\endcsname\relax \MCright[#1]{#2}%
\else \MCleft[#1]{#2}\fi}%
\par}
\makeatother
\begin{document}
\frontmatter
\begin{figure}[hb]
\includegraphics[width=\textwidth, valign=T]{example-image-a}%
\margincaption[t]{\caption{It's the letter A.}\label{fig:sample_image}}
\end{figure}
\lipsum[1]
\begin{figure}[hb]
\includegraphics[width=\textwidth, valign=T]{example-image-a}%
\margincaption[t]{\caption{It's the letter A.}}
\end{figure}
\lipsum[2-3]% second float to bottom of page
\mainmatter
\end{document}