左页为图表,右页为文字,附有课本(续)

左页为图表,右页为文字,附有课本(续)

除了非常有用的讨论左页有图片,右页有正文,课本上有页码,我想处理另外 2 个功能:

  • 取消书籍自动插入的空白页,
  • 可以在图形和表格标题之间切换。

关于第一个,在新章节之前(可能也是在新部分之前)添加了 3 个空白页,而实际上应该只有 1 页。我设法删除了一个重新定义,\chapter如下所示(删除涉及的第一行\clearpage),但没有删除另一个。

\renewcommand\chapter{
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

其次,我定义了一个新命令,\switchcaption如下所示,分别在表格之前和之后调用该命令,并使用“table”和“figure”作为参数。

\newcommand\switchcaption[1]{\def\@captype{#1}}

顺便说一句,我非常有兴趣更好地理解

  • 当直接使用\def而不是 时\(re)newcommand\newcommand\@captype{figure}似乎效果一样好\def\@captype{figure}),
  • 当需要在内部工作时\makeatletter \makeatother(显然\newcommand在两种情况下工作方式不同:它“读取”新的命令名称,并在外面使用后续的括号\makeatletter \makeatother,否则不带括号),
  • 为什么\addfig定义需要两个语句(一个用于定义\@addfig,另一个显然用于定义它的论点)。

非常感谢您的帮助!

答案1

看了评论后,似乎唯一剩下的事情(尽管它实际上不是以问题的形式)就是有效率的table在和之间切换caption。您提到您目前手动执行此操作:

\switchcaption{table}% Switch to table caption
\begin{table}[..]
   ...
\end{table}
\switchcaption{figure}% Switch to figure caption

手动的通过在环境的开始和结束处添加一些代码可以避免交互table。这种“修补”可以使用etoolbox包裹。它提供\AtBeginEnvironment{<env>}{<code>}\AtEndEnvironment{<env>}{<code>}(也提供\BeforeBeginEnvironment{<env>}{<code>}\AfterEndEnvironment{<env>}{<code>})以插入到<code>环境的开始/结束处<env>。稍微高效一点的方法是添加:

\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\AtBeginEnvironment{table}{\def\@captype{table}}% Switch to table captions at beginning of table environment
\AtBeginEnvironment{figure}{\def\@captype{figure}}% Switch to figure captions at beginning of figure environment
\makeatother

您的文档序言应根据所使用的环境根据需要进行切换。


编辑figure:如果您正在使用该环境执行所有figure操作,则上述“解决方案”可能毫无意义 tables。如果是这种情况,您的\switchcaption组合仍然是必要的。

为此,请注意,您仍然可以table在命令中使用环境\addfig,这必然会将标题修改为。这是对和环境Table x: ...的常见误解,源于它们各自的名称。它们只是tablefigure任何内容,允许您在里面放置\includegraphics命令tabletabular(比如说)里面figure

相关内容