可变回忆录目录页码框大小

可变回忆录目录页码框大小

我的书的前言页码很长,突出到了页边距。按照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}

相关内容