除了非常有用的讨论左页有图片,右页有正文,课本上有页码,我想处理另外 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
操作,则上述“解决方案”可能毫无意义和 table
s。如果是这种情况,您的\switchcaption
组合仍然是必要的。
为此,请注意,您仍然可以table
在命令中使用环境\addfig
,这必然会将标题修改为。这是对和环境Table x: ...
的常见误解,源于它们各自的名称。它们只是table
figure
任何内容,允许您在里面放置\includegraphics
命令table
和tabular
(比如说)里面figure
。