Вот 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}