将数字扩展到偶数页和奇数页的边距

将数字扩展到偶数页和奇数页的边距

我在文档中使用 KOMA 脚本。有时,我有一个比文本宽度宽的浮点数,我想让浮点数被推入边距。这就是我定义\widefloat命令的原因,它使用命令检查页面是否为奇数\ifthispageodd,并根据结果将浮动向左或向右推。当浮动位于页面中间时,此方法可以正常工作。但是,当浮动被扔到下一页时,\ifthispageodd会产生错误的结果。你能告诉我如何解决这个问题吗?

MWE:第一个浮点数被正确地推入外边缘,第二个浮点数被推入内边缘。

\documentclass[11pt]{scrbook}
\usepackage{tikz,lipsum}

\newcommand{\widefloat}[1]{%
\ifthispageodd{\makebox[\textwidth][l]{#1}}{\makebox[\textwidth][r]{#1}}}

\begin{document}

\lipsum[1]

\widefloat{
\begin{tikzpicture}
\draw (0,0) rectangle (16cm,10cm);
\end{tikzpicture}}

\lipsum[3]

\widefloat{
\begin{tikzpicture}
\draw (0,0) rectangle (16cm,10cm);
\end{tikzpicture}}

\lipsum[2]

\end{document}

在此处输入图片描述 在此处输入图片描述

答案1

问题出现是因为\ifthispageodd首先将 写入\label文件.aux,然后(本质上)执行\pageref标签的 以获取当前页面。不幸的是,标签和引用可能会彼此分离,并且与您正在放置的图形分离。防止这种情况的一种方法是将整个内容包装在 中\mbox

\newcommand{\widefloat}[1]{%
  \mbox{%
    \ifthispageodd%
    {%
      \makebox[\textwidth][l]{#1}%
    }{%
      \makebox[\textwidth][r]{#1}
    }
  }%
}

您可能还想将其放在\noindent前面\mbox以获得适当的边距对齐。

答案2

出现这种情况是因为当发出第二个时\widefloat,页面仍然是奇数......

将其定义为

\newcommand{\widefloat}[1]{%
\setlength{\alength}{\textheight-\pagetotal}%
\setlength{\blength}{\totalheightof{\parbox{\linewidth}{#1}}}%
\ifdim\alength<\blength\clearpage\fi%
\ifthispageodd{\noindent\makebox[\textwidth][l]{#1}}{\noindent\makebox[\textwidth][r]{#1}}%
}

并添加

\usepackage{calc}

\newlength{\alength}
\newlength{\blength}

在你的序言中,这样你的 MWE 就变成了

\documentclass[11pt]{scrbook}
\usepackage{tikz,lipsum}
\usepackage{calc}

\newlength{\alength}
\newlength{\blength}

\newcommand{\widefloat}[1]{%
\setlength{\alength}{\textheight-\pagetotal}%
\setlength{\blength}{\totalheightof{\parbox{\linewidth}{#1}}}%
\ifdim\alength<\blength\clearpage\fi%
\ifthispageodd{\noindent\makebox[\textwidth][l]{#1}}{\noindent\makebox[\textwidth][r]{#1}}%
}

\begin{document}

\lipsum[1]

\widefloat{%
\begin{tikzpicture}
\draw (0,0) rectangle (16cm,10cm);
\end{tikzpicture}}

\lipsum[3]

\widefloat{%
\begin{tikzpicture}
\draw (0,0) rectangle (16cm,10cm);
\end{tikzpicture}}

\lipsum[2]

\end{document}

输出:

在此处输入图片描述

相关内容