我想将 a\footnoterule
向右移动 3 厘米,以便与 a 向右移动 3 厘米的脚组对齐。
我知道脚注规则使用\hrule
要移动规则,我应该将其放在 中,然后使用或\vbox
移动它。\moveleft
\moveright
但当我这样做时,我失去了字距调整。我可以将脚组包含在内,\vbox
但这会非常复杂。
任何想法?
请参阅以下示例:
\documentclass{article}
\parindent=0pt
\begin{document}
\leftskip=2cm
\footnotesize \moveleft-2cm\vbox{\footnoterule}
\footnote{A good vertical distance} A bad vertical distance
\end{document}
答案1
如果你处于垂直模式,那么
\moveright2cm\vbox{\hrule .4\columnwidth}\nointerlineskip
会做。
这是一个 Plain TeX 模拟。
\leftskip=2cm
\moveright2cm\vbox{\hrule width 5cm}\nointerlineskip
s
\bigskip
\hrule width 5cm
s
\bye
当然,你会在规则之后有一个支柱,也会有一些字距调整(LaTeX 使用规则前为 -3pt,规则后为 2.6pt \footnoterule
)。
\leftskip=2cm
\kern-3pt
\moveright2cm\vbox{\hrule width 5cm}\nointerlineskip
\kern2.6pt
\strut s
\bigskip
\kern-3pt
\hrule width 5cm
\kern2.6pt
\strut s
\bye
如果
\moveright2cm\vbox{
\kern-3pt
\hrule width 5cm
\kern2.6pt
}\nointerlineskip
用于将规则向右移动。
答案2
当我查看脚注生成过程时,我发现它LaTeX
完全是垂直模式。因此很难找到插入水平空格的地方。最后我只能分享这个肮脏的技巧:
\documentclass{article}
\begin{document}
\vspace*{17cm}
\noindent text before \footnote{A good vertical distance} text after
\clearpage
\vspace*{17cm}
\makeatletter
\let\oldfootnoterule=\footnoterule
\def\footnoterule{\moveright3cm\vbox{\oldfootnoterule}}
\def\@makefntext#1{\parindent 1em\noindent \hskip3cm \hb@xt@ 1.8em{\hss \@makefnmark }#1}
\noindent text before \footnote{A good vertical distance} text after
\end{document}
答案3
一位法国人 TeXuser 给我发了一个很好的解决方案。我们必须:
- 将规则放入 vbox 中
- 将此 vbox 放入 hbox 中,并在 hbox 内设置 kern
- 确保此 hbox 后面跟着一个 \vbox 而不是 \hbox。
参见以下三个示例
\newbox\a
\leftskip=2cm
\setbox\a=\vbox{x}
\footnoterule
\unvbox\a
% normal position position
\newpage
\setbox\a=\hbox{x}
\hbox{\kern 2cm\vbox{\footnoterule}}
\unhbox\a
% good x position, bad y position
\newpage
\setbox\a=\vbox{x}
\hbox{\kern 2cm\vbox{\footnoterule}}
\unvbox\a