LaTeX 中的超原始 2 列表格

LaTeX 中的超原始 2 列表格

我想构建一个简单的两列表格,这样我就可以在表格中的其中一行的右边距附加一个边注,例如:

A      B
CC     DDD                              This is a marginal note.
E      FF

我使用的是名为 tufte-book 的 LaTeX 样式,默认情况下,它会将\marginnote文本放入右边距。(对 也一样\footnote。)请参阅:http://www.latextemplates.com/template/tufte-style-book

但这实际上不是样式问题。我的问题是,无论我使用 LaTeX tabular、Plain TeX halign 还是 Plain Tex tabs,我都会在放置 的行中收到类似“未处于外部 par 模式”的错误\marginnote

因为我对表格的要求很低,所以我还尝试了这个宏:

\def\oneline#1#2{\hbox{\hbox to 10ex{#1}#2}}

工作正常,直到我做类似的事情:

\oneline{AA}{BB\marginnote{CC}}

这会提示“不在外部 par 模式中”。宏中的违规代理是第一个hbox,但如果我删除它,那么我的两列最终会出现在不同的行上。

任何想法,将不胜感激。

答案1

\marginnote不能在 内使用tabular。但您可以直接使用tabular并在其后插入边注。

梅威瑟:

\documentclass{tufte-book}

\begin{document}

\begin{tabular}{ll}
A   &   B\\
CC  &   DDD\\
E   &   FF
\end{tabular}
\marginnote{This is a marginal note.}

\end{document} 

输出:

在此处输入图片描述

如果您需要另一行旁边的边注,则可以使用可选参数\marginnote将其向上或向下提升。

例如,要将其放在第一行旁边,请使用

\marginnote[-\baselineskip]{This is a marginal note.}

在此处输入图片描述

对于第一行,您可以简单地使用,而不是使用可选参数

\begin{tabular}[t]{ll}

最后一排

\begin{tabular}[b]{ll}

答案2

marginnote包可以处理表格中的边注,因此请尝试粘贴

\let\marginnote\undefined
\usepackage{marginnote}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\makeatother

在序言中,它应该可以工作。前两行重新定义了\marginnote命令,其余的(取自这个答案由 Gonzalo Medina 编写的注释确保注释始终放在右边距,而不是外边距。

现在以下代码给出了所需的结果:

\begin{tabular}{ll}
A&B\\
CC&DDD\marginnote{This is a marginal note.}\\
E&FF
\end{tabular}

(这也允许在表格的多行上添加注释。)您必须编译两次才能使注释出现在正确的位置。


还要注意,marginnote边距注释具有不同的字体大小,但这可以通过以下代码进行更改,这还允许您使用类的默认边距注释的语法tufte-book进行垂直调整。

\let\marginnote\undefined
\usepackage{marginnote}
\let\oldmarginnote\marginnote
\renewcommand{\marginnote}[2][0pt]{\oldmarginnote{\footnotesize#2}[#1]}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\makeatother

该包的一个问题marginnote是,在同一行调用的边注最终会打印在彼此的顶部,而不是像默认边注那样浮动。我认为最好的解决方案是创建两个不同的命令,一个用于表格,一个用于文本:

\let\tuftenote\marginnote
\let\marginnote\undefined
\usepackage{marginnote}
\let\marginnotemarginnote\marginnote
\let\marginnote\tuftenote
\newcommand{\marginnoteintable}[2][0pt]{\marginnotemarginnote{\footnotesize#2}[#1]}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
\makeatother

现在该命令\marginnote是正常的tufte-book,并且该命令\marginnoteintable在表中有效。

相关内容