我想构建一个简单的两列表格,这样我就可以在表格中的其中一行的右边距附加一个边注,例如:
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
在表中有效。