计算 parbox 宽度使其符合页面边框?

计算 parbox 宽度使其符合页面边框?

我正在使用该program包来排版我的算法。我希望我的注释具有浅灰色背景,因此我使用了colorbox内部parbox(用于多行注释)。

现在的问题是,当我想在缩进线,parbox将的宽度设置为\textwidth\linewidth将使其太大,跨越页面的右边框。

我正在寻找一种方法来parbox根据当前缩进(我似乎无法找到)或其水平起始位置来计算的宽度,以便它始终上升到正确的页面边框。

有任何想法吗?

编辑:这是一个最小工作示例。renewcommand注释掉的是第一个建议的解决方案,但它在这里不起作用。

\documentclass{article}
\usepackage{program}
\usepackage{color}
\usepackage{calc}

\definecolor{commentcolor}{gray}{0.9}
\newcommand{\commentbox}[1] {\colorbox{commentcolor}{\parbox{\linewidth-2\fboxsep}{#1}}}
%\renewcommand{\commentbox}[1] {\noindent\colorbox{commentcolor}{\parbox{\linewidth-2\fboxsep}{#1}}}

\begin{document}

\begin{programbox}
\commentbox{A normal comment.}
\IF someCondition
    \THEN
        \commentbox{An indented comment.}
        myVar := myVar + 1
\FI
\end{programbox}

\end{document}

答案1

如果你的文档总是使用 LaTeX 结构,那么

 \usepackage{calc}

...

\noindent\colorbox{red}\parbox{\linewidth - 2\fboxsep}{....}}

应该可以工作。(如果不行,请提供显示问题的完整 MWE)


在制表环境中,一切都不同,但 LaTeX 已经测量了设置制表位所需的一切,因此您只需找出长度即可。以下定义包括一个,它-15pt占了一些额外的空间,program因此如果您熟悉它,可能可以用该包中的合适内部替换它。(我以前没有用过它:-)但如果您弄错了,TeX 会告诉您日志中的框有多满,所以只需减去这个量。

在此处输入图片描述

\documentclass{article}
\usepackage{program}
\usepackage{color}
\usepackage{calc}

\definecolor{commentcolor}{gray}{0.9}
\makeatletter


\newcommand{\commentbox}[1] {%
  \noindent\colorbox{commentcolor}{%
        \parbox{\linewidth- \dimen\@curtab - 2\fboxsep - 15pt}{%
           \raggedright#1}}}

\begin{document}




\noindent X \dotfill X


\begin{programbox}

\commentbox{A normal comment.}
\IF someCondition
    \THEN
        \commentbox{An indented comment.
                    with 2 lines}
        myVar := myVar + 1
\FI
\end{programbox}


\noindent X \dotfill X

\end{document}

相关内容