Есть ли способ выровнять знак сноски по верху текста сноски?

Есть ли способ выровнять знак сноски по верху текста сноски?

Вот 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»)?

Новая ошибка: при реализации (замечательного) решения Вернера я столкнулся с ошибкой при попытке добавить в текст сноски что-либо, содержащее символ «\».

Наблюдать:

\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

Я не видел необходимости загружать какой-либо пакет в решении Вернера. Обаetoolboxиxstringотносительно большие упаковки.

\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}

Связанный контент