我在 appdix 的页码前添加了一个前缀
\documentclass[a4paper,oneside]{memoir}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\copypagestyle{apx}{plain}
\makeevenfoot{apx}{}{Apx. \thepage}{}
\makeoddfoot{apx}{}{Apx. \thepage}{}
\copypagestyle{chapter}{plain}
\makeevenfoot{chapter}{}{Apx. \thepage}{}
\makeoddfoot{chapter}{}{Apx. \thepage}{}
\pagestyle{apx}
有什么方法可以给我的目录中的编号添加相同的前缀吗?或者有没有另一种方法可以将两个操作合并为一个?
答案1
您有以下几种选择:
选项1
这是您当前拥有的内容:更新附录的页面样式,将其作为页眉/页脚的一部分添加
Apx.
到前面。\thepage
\addtodef{\appendix}{}{% \copypagestyle{apx}{plain}% \makeevenfoot{apx}{}{Apx. \thepage}{}% \makeoddfoot{apx}{}{Apx. \thepage}{}% \copypagestyle{chapter}{plain}% \makeevenfoot{chapter}{}{Apx. \thepage}{}% \makeoddfoot{chapter}{}{Apx. \thepage}{}% \pagestyle{apx}% }
它的缺点是未包含在目录中。
选项 2
\thepage
对附录进行全面更新,并调整附录中每个与目录相关的条目的页面宽度框。\addtodef{\appendix}{}{% \renewcommand{\thepage}{Apx.~\arabic{page}}% \addtocontents{toc}{\protect\setpnumwidth{4em}}% }
这
\pageref
也会影响目录中的条目,这本质上不是一个坏主意。但是,目录中的页码块宽度会有所不同。不一致并不总是一个好主意。选项 3
这结合了选项 1 和 2 的一部分(但不更新
\thepage
)。\newcommand{\replacecontentsline}[3]{\oldcontentsline{#1}{#2}{Apx.~#3}} \addtodef{\appendix}{}{% \copypagestyle{apx}{plain}% \makeevenfoot{apx}{}{Apx. \thepage}{}% \makeoddfoot{apx}{}{Apx. \thepage}{}% \copypagestyle{chapter}{plain}% \makeevenfoot{chapter}{}{Apx. \thepage}{}% \makeoddfoot{chapter}{}{Apx. \thepage}{}% \pagestyle{apx}% \addtocontents{toc}{\let\protect\oldcontentsline\protect\contentsline \let\protect\contentsline\protect\replacecontentsline}% \addtocontents{toc}{\protect\setpnumwidth{4em}}% }
使用的引用
\pageref
仍将指向不包含的页码Apx.
,这不是最终用户所期望的。选项 4
我的首选选项是更新
\thepage
(因此也是\pageref
s)以及为 ToC 设置一些一致的页码块宽度。\setpnumwidth{4em}% \addtodef{\appendix}{}{% \copypagestyle{apx}{plain}% \makeevenfoot{apx}{}{\thepage}{}% \makeoddfoot{apx}{}{\thepage}{}% \pagestyle{apx}% \renewcommand{\thepage}{Apx.~\arabic{page}}% }
下面是使用上述选项 4 的简单示例:
\documentclass[oneside]{memoir}
\setpnumwidth{4em}%
\addtodef{\appendix}{}{%
\copypagestyle{apx}{plain}%
\makeevenfoot{apx}{}{\thepage}{}%
\makeoddfoot{apx}{}{\thepage}{}%
\pagestyle{apx}%
\renewcommand{\thepage}{Apx.~\arabic{page}}%
}
\usepackage{lipsum}
\begin{document}
\sloppy% Just for this example
\tableofcontents
\chapter{A chapter}\lipsum[1-50]
\section{A section}\lipsum[1-50]
\clearpage\appendix
\chapter{An appendix}\lipsum[1-50]
\section{A section}\lipsum[1-50]
\end{document}
答案2
如果您希望将页码本身记录为Apx. #
,则您不应编辑页面样式。相反,您应该重新定义\thepage
。
\documentclass[a4paper,oneside]{memoir}
\begin{document}
\tableofcontents
\chapter{Test}
\clearpage %So that the new \thepage will not leak to the previous chapter.
\appendix
\renewcommand\thepage{Apx. \arabic{page}}
\chapter{Test2}
\end{document}
如果您这样做,您可能还想\setpnumwidth
为目录中的页码(现在包括前缀Apx
)留出额外的空间。
答案3
由于您要更改附录中的页码格式,我认为您也应该重新开始页码编号。因此,我在一组用于维护 LaTeX 实验室手册的宏中这样做:
\makeatletter
\def\apxpagenumbering#1{%
\global\c@page \@ne% page=1
\gdef\thepage{Apx. \csname @#1\endcsname \c@page}%
}
\makeatother
现在,当您启动时appendix
,您发出一个,\apxpagenumbering{<nuber format>}
并且您可以选择通常的数字格式,,,arabic
等等roman
。
正如其他答案中所述,您必须调整目录的宽度,因为默认值只有 1.55em,这不够,这些较长的页码将扩展右边距。但是,前面部分中带有简单数字的前导点将太靠左。
为了避免这种情况,您可以做的是在附录开始的位置更改这些宽度。这是通过以下方式完成的:
\makeatletter
\addtocontents{toc}{\def\string\@pnumwidth{4em}}
\addtocontents{toc}{\def\string\@tocrmarg{5em}}
\makeatother
现在我们得到:
但这不是全部,因为现在您将丢失索引中的条目。当ind
从文件构建文件时idx
,除了页码之外的所有内容都将被丢弃。这没有简单的解决方案。我发现的唯一方法是使用makeidx
并编译文档四次。使用此设置您无法使用,imakeidx
因为索引每次运行时都会更新,这将不起作用。\index
然后必须以的形式指定条目\index{<entry>|<cmd>}
,并且\cmd
必须正确定义。
我们所做的如下:
- 运行不带前缀的 LaTeX
- 跑步
makeidx
- 运行带前缀的 LaTeX 两次(第二次用于更新
toc
)
现在我们要把事情做好:
为了使一切变得简单,为此定义了一些宏,以便我们只需输入两次命令,空的用于创建索引,其余的带有前缀。既然我们已经到了这一步,最好的办法是添加前缀的自动测量,以便我们可以根据需要对其进行更改。
完整代码如下:
\documentclass{article}
\usepackage{pgfmath}
\usepackage{makeidx}\makeindex
\usepackage{lipsum}
\newlength{\apxpnumwidth}
\newlength{\apxtocrmarg}
\newlength{\apxpgpfxwidth}
\setlength{\apxpgpfxwidth}{0pt}
\makeatletter
\newcommand{\apxpageprefix}[1]{
\ifx\relax#1\relax
\def\apxpgpfx{}
\else
\def\apxpgpfx{\protect#1}
\fi
\settowidth{\apxpgpfxwidth}{\apxpgpfx}
\pgfmathsetlength{\apxpnumwidth}{\the\apxpgpfxwidth+1.55em}
\pgfmathsetlength{\apxtocrmarg}{\the\apxpnumwidth+1em}
}
\newcommand{\apx}[1]{\apxpgpfx#1}
\def\apxpagenumbering#1{%
\global\c@page \@ne% page=1
\gdef\thepage{\apxpgpfx\csname @#1\endcsname \c@page}%
}
\newcommand\apxtocwidths{%
\addtocontents{toc}{\def\string\@pnumwidth{\string\the\string\apxpnumwidth}}
\addtocontents{toc}{\def\string\@tocrmarg{\string\the\string\apxtocrmarg}}
}
\makeatother
\newcommand\apxindex[1]{\index{#1|apx}}
\apxpageprefix{\textit{Apx.}\hspace{0.1em}--}
%\apxpageprefix{}
\begin{document}
\tableofcontents
\section{A section}\lipsum[1-5]
\index{in main}
\subsection{A subsection}\lipsum[1-5]
\clearpage\appendix
\apxpagenumbering{arabic}
\apxtocwidths
\section{An appendix}\lipsum[1-5]
\apxindex{in appendix}
\subsection{A subsection}\lipsum[1-5]
\printindex
\end{document}
您必须取消注释%\apxpageprefix{}
并运行 LaTeX 和makeidx
。然后再次注释它并使用前缀运行 LaTeX 两次。
现在,您可以将任何您喜欢的东西用作前缀。只是为了好玩,我\usepackage{tikz}
为我的 labbook 部分制作了一张图片(带有):
\newcommand{\erlenmeyer}{%
\begin{tikzpicture}[scale=0.3]
\fill[blue!70!white] (1,0)--(0.76,0.50)--(0.24,0.50)[rounded corners=0.5mm]--
(0,0)--cycle;
\draw[rounded corners=0.5mm] (0,0)--(1,0)--(0.65,0.8)--(0.65,1.2)--(0.66,1.2)
--(0.34,1.2)--(0.35,1.2)--(0.35,0.8)--cycle;
\draw[very thin,fill=white] (0.22,0.2) rectangle (0.45,0.35);
\draw[very thin] (0.55,0.15)--(0.65,0.15) (0.55,0.35)--(0.65,0.35)
(0.55,0.65)--(0.65,0.65);
\end{tikzpicture}}
获取: