我如何获取行内的当前位置?或者我如何找出距离行尾还有多少空间?(借助它,\linewidth
很容易从一个值中推断出另一个值)
下面是我想要实现的一个例子(该示例是通过手动间距完成的)。
我想知道红色框的宽度(红色框是我在屏幕截图中插入的)。知道长度后,很容易做到这样的事情:
\addtolength{\MYLENGTH}{-2em}
\hspace{2em}\parbox[t]{\MYLENGTH}{#1}
背景:我正在使用 algpseudocode 包编写伪代码。该包提供了一个\Comment
命令,用于在行后放置注释。我想要更长的注释,跨越多行,如屏幕截图所示。
到目前为止我尝试过什么?
使用该
linegoal
包。这有效不知何故,但每次我编译时,包确定的值都会(稍微)发生变化。它还有一个奇怪的错误,即值总是错误,相差一个常数。按照这里的答案:如何在 LaTeX 中获取元素位置?。到目前为止,这种方法有效,我获得了绝对位置,但我无法从中确定相对位置。如果我能知道行尾的绝对 x 位置,我就能确定间距,但该怎么做呢?
手动测量位于红框左侧的所有内容。这种方法可行,但我需要事先知道将放置在那里的内容。使用这种方法很麻烦。
答案1
改变其结果的原因linegoal
有两个:一是它需要两次编译,之后它应该稳定下来;二是细微的变化可能因为它返回的不是位置,而是相对于剩余位置的位置\linewidth
,剩余位置可能会因为字距调整决定或其他原因而改变。
对于绝对位置,您可以使用zref
子包zref-savepos
(linegoal
使用)(并且在任何一种情况下,您只能使用 pdfTex 或 XeTex——没有 LuaTeX 或 DVI 输出)。然后使用以下命令组合:
\zsaveposx{<yourlabel>) % tells pdfTeX to save the current position (x-coord) once generated; returns nothing; can be used inline; expands variables in argument
\zposx{<yourlabel>) % returns the saved x-coord once generated, or 0? if not yet generated (not cycled thru compilation yet); also usable inline
得到的坐标为 sp我认为, 但至少关于柱检测的答案为我们提供了页面中点 (19000000) 以及要测试的内容(“stop” 和 “start2”),以便比较您所在的位置。我最近对 twocolumn 进行了调整,使用了以下函数:
\def\islcol#1{\ifnum 0#1<19000000 1\else 0\fi\relax}
\newcommand\isleftcol[1][blahlabel]{\zsaveposx{pos-#1} \islcol{\zposx{#1}}}