在使用该类的文档中memoir
,我尝试在页码和文本之间的整个表格上画一条垂直线。
我的要求(到目前为止只剩下一个,那就是问题):
- 有包含章节和节的目录(可以)
- 没有章节或节号(只有文本)(可以)
- 将页码放在左边,将项目文本放在右边(确定)
- 允许章节和节文本之间采用略微不同的样式(确定)
- 两者之间的垂直线<= 不好
但我不知道如何创建垂直线,使其与目录的高度精确一致(可能会跨越多页)
我的 MWE:
\documentclass{memoir}
% Clear Chapter and Section numbers
\renewcommand\chapternumberline[1]{}
\renewcommand\numberline[1]{}
% Prepare a length to indent the lot
\newlength\ToCindent
\setlength\ToCindent{0.3\textwidth}
\makeatletter
% Put pagenumbers and item texts where they should go
\newcommand*{\l@mytocentry}[3]{%
\bigskip
\par%
\noindent\parbox[c]{\ToCindent}{\makebox[\dimexpr\ToCindent-2em][r]{\Large#2}\hfill}%
\parbox[c]{\dimexpr\textwidth-\ToCindent\relax}{#1}%
}
% Create the items (with different styles)
\renewcommand*{\l@chapter}[2]{%
\l@mytocentry{\Huge#1}{#2}{\chaptername}%
}
\renewcommand*{\l@section}[2]{%
\l@mytocentry{\Large#1}{#2}{\sectionname}%
}
\makeatother
\begin{document}
\frontmatter%
\tableofcontents*
\mainmatter%
\chapter{Welcome}
\section{A Section}
\section{Another Section}
\chapter{Hello}
\section{Yet another section}
\section{Yet another section}
\chapter{World}
\section{Yet another section}
\end{document}
enter code here
我试过了:
- 制作一个表格,其中一列是页面,另一列是文本,中间有一条垂直线,但我只能得到每一行,而不知道如何循环它们以将页码放在一边,将文本放在另一边 - 无论如何我都犹豫不决,因为我担心这会重新发明轮子
- 灵感来自这个问题我已经走到这一步了,但不知道该怎么做……
这些问题帮助我走到了这一步,但我还没有找到一个可以满足我需求的垂直线:
更新:
接受的答案解决了我的问题。为了完整起见,下面是我最终实现它以确保线条居中的方法。(我添加了一个变量mytocentry
并在我的元素之间添加了线条)
\newcommand{\vertrule}{$\smash{\rule[-2.3em]{0.2mm}{13mm}}$}
\newcommand*{\l@mytocentry}[3]{%
\bigskip
\par%
\noindent\parbox[c]{\ToCindent}{\makebox[\dimexpr\ToCindent-1em][r]{\Large#2}\hfill}%
\parbox[c]{1em}{\vertrule\hfill}%
\parbox[c]{\dimexpr\textwidth-\ToCindent\relax}{#1}%
}
答案1
尝试一下 MWE 的这个修订版本(对此表示感谢)。
% memtocprob.tex SE 547344
\documentclass{memoir}
% Clear Chapter and Section numbers
\renewcommand\chapternumberline[1]{}
\renewcommand\numberline[1]{}
% Prepare a length to indent the lot
\newlength\ToCindent
\setlength\ToCindent{0.3\textwidth}
\makeatletter
% Put pagenumbers and item texts where they should go
\newcommand*{\l@mytocentry}[3]{%
\bigskip
\par%
\noindent\parbox[c]{\ToCindent}{\makebox[\dimexpr\ToCindent-2em][r]{\Large#2}\hfill}%
\parbox[c]{\dimexpr\textwidth-\ToCindent\relax}{#1}%
}
\newcommand{\myrule}{$\smash{\rule[-2mm]{1mm}{10mm}}$ } % PW ADDED
% Create the items (with different styles)
\renewcommand*{\l@chapter}[2]{%
\l@mytocentry{\Huge \myrule #1}{#2}{\chaptername}% % PW MODIFIED
}
\renewcommand*{\l@section}[2]{%
\l@mytocentry{\Large \myrule #1}{#2}{\sectionname}% % PW MODIFIED
}
\makeatother
\begin{document}
\frontmatter%
\tableofcontents*
\mainmatter%
\chapter{Welcome}
\section{A Section}
\section{Another Section}
\chapter{Hello}
\section{Yet another section}
\section{Yet another section}
\chapter{World}
\section{Yet another section}
\end{document}
该\rule
宏绘制给定维度的规则,可能升高或降低(如上例所示)。\smash
是一个 TeX 数学模式宏,它使 TeX 认为其参数不占用垂直空间。在目录中打印chapter
和section
标题之前,我已将它们放在一起。更改垂直规则的位置和大小以适应。