右对齐左侧边距注释与内容在同一行

右对齐左侧边距注释与内容在同一行

我正在尝试编写一个命令,以便轻松设置右对齐左边距注释,而不必担心内容的流动。基本上,我希望边距注释与内容中的下一段文本位于同一行。以下是我目前所拥有的:

\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进行向下移动。\belowbaselinestackengine

我没有显示输出,因为它本质上与上面的相同。

\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}

相关内容