有没有办法将脚注标记与脚注文本的顶部对齐?

有没有办法将脚注标记与脚注文本的顶部对齐?

以下是 MWE:

\documentclass[12pt]{scrartcl}
%%Footnote Mods%%
\deffootnote[1.8em]{0pt}{1.6em}{\textsuperscript{\thefootnotemark}}
%%%%%%
\begin{document}

Sample text%
%
\footnote{Footnote text}
%
\end{document}

如何将脚注标记的顶部与脚注文本的顶部对齐(在 MWE 中,我希望“1”的顶部与“F”齐平)?

新错误:在实施 Werner 的(伟大)解决方案时,我尝试将任何带有“\”的内容添加到脚注文本中时遇到错误。

观察:

\documentclass[12pt]{scrartcl}% http://ctan.org/pkg/koma-script
\usepackage{xstring}% http://ctan.org/pkg/xstring
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
% Patch \scr@saved@footnotetext to extract first character of footnote and store         in \fnfirstchar
\patchcmd{\scr@saved@footnotetext}% <cmd>
  {\@makefntext}% <search>
    {\StrLeft{#1}{1}[\fnfirstchar]\@makefntext}% <replace>
    {}{}% <success><failure>
\begin{document}

\makeatletter
\deffootnote[1.8em]{0pt}{1.6em}{%
  \settoheight{\@tempdima}{\fnfirstchar}% Height of first character in footnote
  \settoheight{\@tempdimb}{$\scriptstyle\thefootnotemark$}% Height of footnote mark
  \raisebox{\dimexpr\@tempdima-\@tempdimb}{$\scriptstyle\thefootnotemark$}}
\makeatother

Sample text\footnote{Footnote text: \S modified}.

\end{document}

答案1

对此的简短回答是“精确放置”并不总是可行的。为什么?重要的是要注意 TeX 使用的是框而不是字符。每个字符都有一个边界框,定义其水平和垂直大小/结构。因此,元素的对齐只能达到这些框的精度。从这个意义上讲,您能做的最好的事情可能是:

\makeatletter
\deffootnote[1.8em]{0pt}{1.6em}{%
  \settoheight{\@tempdima}{F}% Height of F
  \settoheight{\@tempdimb}{$\scriptstyle\thefootnotemark$}% Height of footnote mark
  \raisebox{\dimexpr\@tempdima-\@tempdimb}{$\scriptstyle\thefootnotemark$}}
\makeatother

这将分别将 的高度F\scriptstyle脚注标记存储在\@tempdima和中\@tempdimb(这些是临时寄存器)。然后它将脚注标记(由 给出\thefootnotemark)提升到正确的高度。由于“装箱限制”,输出不符合预期。下面是一个显示不同输出的最小示例,仅作为示例。它还进行了更新以捕获脚注的第一个字符(而不是将其固定为字符F):

在此处输入图片描述

\documentclass[12pt]{scrartcl}% http://ctan.org/pkg/koma-script
\usepackage{xstring}% http://ctan.org/pkg/xstring
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
% Patch \scr@saved@footnotetext to extract first character of footnote and store in \fnfirstchar
\patchcmd{\scr@saved@footnotetext}% <cmd>
  {\@makefntext}% <search>
    {\StrLeft{#1}{1}[\fnfirstchar]\@makefntext}% <replace>
    {}{}% <success><failure>
\begin{document}

% Original footnote modification
\deffootnote[1.8em]{0pt}{1.6em}{\textsuperscript{\thefootnotemark}}
Sample text\footnote{Footnote text: original}.

\addtocounter{footnote}{-1}% Restore counter value

\makeatletter
\deffootnote[1.8em]{0pt}{1.6em}{%
  \settoheight{\@tempdima}{\fnfirstchar}% Height of first character in footnote
  \settoheight{\@tempdimb}{$\scriptstyle\thefootnotemark$}% Height of footnote mark
  \raisebox{\dimexpr\@tempdima-\@tempdimb}{$\scriptstyle\thefootnotemark$}}
\makeatother

Sample text\footnote{Footnote text: modified}.

\end{document}

xstring捕获脚注的第一个字符(通过\StrLeft)并将其存储在中\fnfirstchar,同时etoolbox通过在正确的位置插入提取来修补适当的命令(脚注文本已被阅读,但正在排版)。

如图所示,将脚注标记和F字符括起来表明它们位于同一高度(正如 TeX 所看到的):

在此处输入图片描述

答案2

一种不太技术性但更符合印刷习惯的方法可能是使用包superiors. 引用手册中的话:

LaTeX 中脚注和尾注标记的默认行为是将数字打印为数学上标。在大多数情况下,这意味着大小约为正常衬线数字的 70%,顶部略高于大写字母的顶部。在许多情况下,上标数字在所有尺寸上都缩小了约 70%,使它们看起来相当小,但过高。[...]

另外,也可以使用上部数字 - 小数字,通常为内衬数字高度的 50% 到 60%,例如 1234567890。通常,它们的设计使得数字的顶部与字体中大写字母的顶部对齐,但有时会稍高一些,与上升部高度相对应。

\documentclass[12pt]{scrartcl}
%%Footnote Mods%%
\deffootnote[1.8em]{0pt}{1.6em}{\textsu{\thefootnotemark}\,}
%%%%%%
\usepackage{newtxtext}
\usepackage[supstfm=ntxsups,supspaced=.06em]{superiors}
\begin{document}

Sample text%
%
\footnote{Footnote text}
%
\end{document}

在此处输入图片描述

此外,包选项raised=<dim>还允许调整上标数字的垂直位置。当然,垂直位置不取决于后面的字符。(但如果后面的标记是小标记a或控制序列怎么办?)

答案3

我认为 Werner 的解决方案不需要加载任何包。电子工具箱字符串是相对较大的包裹。

\documentclass[12pt]{scrartcl}
\makeatletter
\begingroup
\let\@tempa\scr@saved@footnotetext
\edef\@tempa{\endgroup
  \def\noexpand\scr@saved@footnotetext##1{%
    \unexpanded\expandafter{\@tempa{#1}}%
    \unexpanded{\fngetfirstchar\fnfirstchar{#1}}%
  }%
}
\@tempa
\def\fngetfirstchar#1#2{%
  \begingroup
  \def\@tempa##1##2\fn@nil{\endgroup\gdef#1{##1}}%
  \expandafter\@tempa#2\fn@nil
}
\def\usenewfootnotestyle{%
  \deffootnote[1.8em]{0pt}{1.6em}{%
    \begingroup
    \let\s\ensuremath
    \settoheight{\@tempdima}{\fnfirstchar}%
    \settoheight{\@tempdimb}{\s{\scriptstyle\thefootnotemark}}%
    \raisebox{\dimexpr\@tempdima-\@tempdimb}{\s{\scriptstyle\thefootnotemark}}%
    \endgroup
  }%
}
\makeatother
\begin{document}
% Original footnote style:
\deffootnote[1.8em]{0pt}{1.6em}{\textsuperscript{\thefootnotemark}}
Sample text\footnote{Footnote text: original}.
\par
\addtocounter{footnote}{-1}
% Change footnote style:
\usenewfootnotestyle

Sample text\footnote{Footnote text: modified}.
\end{document}

相关内容