我正在尝试编写一个命令,以便轻松设置右对齐左边距注释,而不必担心内容的流动。基本上,我希望边距注释与内容中的下一段文本位于同一行。以下是我目前所拥有的:
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareRobustCommand{\mymarginpar}[1]{%
\mbox{}\marginpar[\raggedleft#1]{\raggedright#1}}
\begin{document}
\reversemarginpar
\mymarginpar{\textit{Consider}}
\begin{verbatim}
a = 1/5
while True: {
print(a)
a = (1+a) / 2
}
\end{verbatim}
\mymarginpar{\textit{Prints}}
\begin{verbatim}
1/5
3/5
4/5
9/10
\end{verbatim}
\end{document}
其结果为:
而我想要的是:
(假设我的眼睛完全对齐)谢谢!
答案1
正如 egreg 指出的那样控制逐字环境之前和之后的垂直空间?,verbatim
环境在列表的顶部和底部添加了空格,他展示了如何关闭它。此外,由于开始了新行,我还必须\vspace{-\baselineskip}
撤消新行。最后,我使用 在您的两个示例之间添加了额外的空格\bigskip
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}
\makeatletter
\preto{\@verbatim}{\topsep=0pt \partopsep=0pt }
\makeatother
\DeclareRobustCommand{\mymarginpar}[1]{%
\mbox{}\marginpar[\raggedleft#1]{\raggedright#1}}
\begin{document}
\reversemarginpar
\mymarginpar{\textit{Consider}}
\vspace{-\baselineskip}
\begin{verbatim}
a = 1/5
while True: {
print(a)
a = (1+a) / 2
}
\end{verbatim}
\bigskip
\mymarginpar{\textit{Prints}}
\vspace{-\baselineskip}
\begin{verbatim}
1/5
3/5
4/5
9/10
\end{verbatim}
\end{document}
如果您的逐字列表不必跨越页面边界,这里有另一种方法,即将逐字材料塞入verbbox
,然后该框可以像任何其他 LaTeX 框一样使用。由于框的基线在底部,因此必须将框向下移动其整个高度(除了 的高度) ,以使逐字的顶行与 marginpar 对齐。我使用包的宏\strutbox
进行向下移动。\belowbaseline
stackengine
我没有显示输出,因为它本质上与上面的相同。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{verbatimbox,stackengine}
\DeclareRobustCommand{\mymarginpar}[1]{%
\noindent\mbox{}\marginpar[\raggedleft#1]{\raggedright#1}}
\begin{document}
\reversemarginpar
\mymarginpar{\textit{Consider}}
\begin{verbbox}[\strut]
a = 1/5
while True: {
print(a)
a = (1+a) / 2
}
\end{verbbox}
\belowbaseline[-\ht\strutbox]{\theverbbox}
\bigskip
\mymarginpar{\textit{Prints}}
\begin{verbbox}[\strut]
1/5
3/5
4/5
9/10
\end{verbbox}
\belowbaseline[-\ht\strutbox]{\theverbbox}
\end{document}