将 \footnoterule 移至右侧

将 \footnoterule 移至右侧

我想将 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

相关内容