更新:

更新:

在使用该类的文档中memoir,我尝试在页码和文本之间的整个表格上画一条垂直线。

我的要求(到目前为止只剩下一个,那就是问题):

  • 有包含章节和节的目录(可以)
  • 没有章节或节号(只有文本)(可以)
  • 将页码放在左边,将项目文本放在右边(确定)
  • 允许章节和节文本之间采用略微不同的样式(确定)
  • 两者之间的垂直线<= 不好

基本上,我试图模拟此目录中的行: (目录:罗伯特·E·西曼斯的“阿波罗计划”,2007 年)

以下是我与 MWE 所拥有的: 我的 MWE 目录

但我不知道如何创建垂直线,使其与目录的高度精确一致(可能会跨越多页)

我的 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 认为其参数不占用垂直空间。在目录中打印chaptersection标题之前,我已将它们放在一起。更改垂直规则的位置和大小以适应。

相关内容