我的书的前言页码很长,突出到了页边距。按照memoir
文档说明,很容易解决这个问题,就像下面的 MWE 一样。
文档(§9.2.2)指出:
“所使用的长度
\setrmarg
应大于设置的长度\setpnumwidth
。这些值在任何给定的文档中都应保持不变”。
不包含各种变化是有道理的,但这意味着至少就我而言,pnumwidth
由于几行长的罗马数字,目录的许多页面都有很大的变化(因此牺牲了条目的宽度)。
我尝试了更小的setrmarg
,这确实允许更长的条目,但它似乎不会影响点,点仍然停止在页码框之前。
所以我想要做的是将增加的pnumwidth
内容限制在前面(巧合的是,前面没有点)。
梅威瑟:
\documentclass[%
a4paper,
11pt,
twoside,
one column,
openright
]{memoir}
\setpnumwidth{3.55em}
\setrmarg{5.55em}
\begin{document}
\frontmatter
\setcounter{page}{33}
\tableofcontents
\cleardoublepage
\listoffigures
\cleardoublepage
\listoftables
\cleardoublepage
\mainmatter
\renewcommand{\thefigure}{\arabic{chapter}--\arabic{figure}}
\renewcommand{\thetable}{\arabic{chapter}--\arabic{table}}
\section{Section}
The section.
\begin{table}
\caption{Table}
Table contents
\end{table}
\end{document}
编辑:我尝试了第一种方法,将其放在\resetpnum
后面\mainmatter
,结果很奇怪:框确实被重置了,但直到一章之后(在我的主文件中,有多个章节和附录)。
第二次编辑:使用涉及的更长的解决方案\etoolbox
,结果相同。以下是其中的几行.toc
:
\contentsline {subsection}{\numberline {1.10.4}Remarks regarding presentation}{20}{subsection.1.10.4}
\defcounter {refsection}{0}\relax
\def \@pnumwidth {0.55em}\def \@tocrmarg {1.55em}
\defcounter {refsection}{0}\relax
\contentsline {chapter}{\chapternumberline {2}Larsa/Senkereh}{21}{chapter.2}
EDIT3(明显的解决方案):注意到文档memoir
第 9.2 节第 156 页(版本 v3.7f,2016/05/16)中的一些注释后,我尝试了下面的代码,似乎有效:
...
\frontmatter
\setcounter{page}{5}% as per Olms format requirements
\cftlocalchange{toc}{3.55em}{5.55em}
\tableofcontents
\cleardoublepage
\listoffigures
\cleardoublepage
\listoftables
\cftlocalchange{toc}{1.55em}{2.55em}
\cleardoublepage
...
答案1
我可能的做法如下。使用\cftlocalchange
, 是一种方法,但这会将使用的值留在正文中,我喜欢将布局内容保留在序言中(或单独的包中)。
相反,我使用内置于目录钩子系统中的 memoirs 来插入要从目录中执行的钩子(宏)。请注意,这意味着我们不能使用它,\cftlocalchange
因为它会写入目录,并且钩子会从目录中运行。因此,我们只需手动添加\cftlocalchange
要添加到目录中的内容即可。
请注意,在这种情况下,这些更改是全局的。如果您不想要这个,请将其放在\tableofcontens
组中。
\documentclass[%
a4paper,
11pt,
twoside,
one column,
openright
]{memoir}
% define what the hooks do
% we cannot use \cftlocalchange as this hook is added inside the toc
% and \cftlocalchange writes to the toc
\cftinsertcode{FRONTMATTER}{%
\protect\setpnumwidth{3.55em}
\protect\setrmarg{5.55em}
}
\cftinsertcode{MAINMATTER}{%
\protect\setpnumwidth{2.55em}
\protect\setrmarg{3.55em}
}
\begin{document}
\cftinserthook{toc}{FRONTMATTER}
\frontmatter
\setcounter{page}{33}
\tableofcontents
\chapter{Test in frontmatter}
\section{Test}
\cleardoublepage
\listoffigures
\cleardoublepage
\listoftables
\cleardoublepage
\cftinserthook{toc}{MAINMATTER}
\mainmatter
\renewcommand{\thefigure}{\arabic{chapter}--\arabic{figure}}
\renewcommand{\thetable}{\arabic{chapter}--\arabic{table}}
\section{Section}
The section.
\begin{table}
\caption{Table}
Table contents
\end{table}
\end{document}
答案2
关键是在您想要更改和的.toc
位置写入。您可以这样做:\@pnumwidth
\@tocrmarg
创建命令\resetpnum
:
\newcommand\resetpnum{%
\addtocontents{toc}{%
% I think these are the default values
\string\def\string\@pnumwidth{1.55em}%
\string\def\string\@tocrmarg{2.55em}%
}}
然后,你要么\resetpnum
在你想要的地方发出命令,要么使用etoolbox
将命令附加到以下位置,例如\mainmatter
:
\usepackage{etoolbox}
\appto\mainmatter{\resetpnum}
完整示例:
\documentclass[%
a4paper,
11pt,
twoside,
one column,
openright
]{memoir}
\setpnumwidth{3.55em}
\setrmarg{5.55em}
\newcommand\resetpnum{%
\makeatletter
\addtocontents{toc}{%
\string\def\string\@pnumwidth{0.55em}%
\string\def\string\@tocrmarg{1.55em}%
}
\makeatother
}
\usepackage{etoolbox}
\appto\mainmatter{\resetpnum}
\begin{document}
\frontmatter
\setcounter{page}{33}
\tableofcontents
\cleardoublepage
\listoffigures
\cleardoublepage
\listoftables
\cleardoublepage
\mainmatter
\renewcommand{\thefigure}{\arabic{chapter}--\arabic{figure}}
\renewcommand{\thetable}{\arabic{chapter}--\arabic{table}}
\section{Section}
The section.
\begin{table}
\caption{Table}
Table contents
\end{table}
\end{document}
生成.toc
如下文件:
\contentsline {chapter}{Contents}{xxxiii}
\contentsline {chapter}{List of Figures}{xxxv}
\contentsline {chapter}{List of Tables}{xxxvii}
\def \@pnumwidth {0.55em}\def \@tocrmarg {1.55em}
\contentsline {section}{\numberline {0.1}Section}{1}