![计算 parbox 宽度使其符合页面边框?](https://linux22.com/image/253279/%E8%AE%A1%E7%AE%97%20parbox%20%E5%AE%BD%E5%BA%A6%E4%BD%BF%E5%85%B6%E7%AC%A6%E5%90%88%E9%A1%B5%E9%9D%A2%E8%BE%B9%E6%A1%86%EF%BC%9F.png)
我正在使用该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}