這是一個 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
我沒有看到需要在維爾納的解決方案中加載任何包。兩個都電子工具箱和字串都是比較大的包。
\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}