脚注向左对齐,页面空白处相同

脚注向左对齐,页面空白处相同

我必须排版相当复杂的脚注:

  • 在每一页上,所有脚注的脚注文本都以相同的缩进开始(不必在所有页面上都相同)
  • 脚注编号应左对齐
  • 脚注文本的段落应全部缩进相同(像在 TestD 中一样对齐)
  • 数字后面不应该有很大空间,所以我不能只为每个脚注编号保留三个数字的空间。

目前我正在使用以下代码,但该代码远非完美:

\documentclass[fontsize=10pt,ngerman,paper=a4]{scrbook}

\newlength{\test}
\let\myfootnote\footnote
\renewcommand{\footnote}[1]{\myfootnote{\settowidth{\test}{\thefootnotemark}\hspace*{\test}#1}}
\deffootnote[.5em]{1.5em}{1.5em}{\makebox[.5em][l]{\thefootnotemark}}

\usepackage{blindtext}
\begin{document}
TestA
\footnote{TestfootnoteOne}
TestB
\footnote{Long Footnote: \blindtext}
TestC
\setcounter{footnote}{10}
\footnote{Two places}
TestD
\footnote{Long Footnote: \blindtext}
TestE
\setcounter{footnote}{123}
\footnote{Three places}
TestF
\footnote{Long Footnote: \blindtext}
\end{document}

答案1

您必须运行两次才能使其工作,因为第一次运行用于写入辅助文件。

\documentclass[fontsize=10pt,ngerman,paper=a4]{scrbook}
\usepackage{everypage}
\usepackage{blindtext}

\newlength{\tempdima}
\newlength{\tempdimb}
\newcommand{\maxfootnotemark}{}
\newcommand{\ThisFootnotemark}{\thefootnotemark}

\makeatletter
\newcommand{\writepagehook}{%
  \ifx\maxfootnotemark\empty\relax%
  \else
    \begingroup
      \immediate\write\@auxout{%
        \string\MaxFootnotemark{\maxfootnotemark}{\thepage}%
      }%
    \endgroup
    \gdef\maxfootnotemark{}%
  \fi}

\newcommand{\usepagehook}{%
  \@ifundefined{MaxFootnotemark\thepage}{}%
  {\global\edef\ThisFootnotemark{\expandafter\csname MaxFootnotemark\thepage\endcsname}}%
}
\makeatother

\AtBeginDocument{\usepagehook}
\AddEverypageHook{\writepagehook\stepcounter{page}\usepagehook\addtocounter{page}{-1}}

\newcommand{\MaxFootnotemark}[2]% #1 = largest footnote mark, #2 = page
{\expandafter\gdef\csname MaxFootnotemark#2\endcsname{#1}}

\let\myfootnote=\footnote

\renewcommand{\footnote}[1]{\myfootnote{%
\settowidth{\tempdima}{\thefootnotemark}%
\settowidth{\tempdimb}{\maxfootnotemark}%
\ifdim\tempdima>\tempdimb\global\edef\maxfootnotemark{\thefootnotemark}\fi%
\settowidth{\tempdima}{\ThisFootnotemark}%
\setlength{\tempdimb}{\textwidth}%
\addtolength{\tempdimb}{-\tempdima}%
\hspace{\tempdima}\parbox[t]{\tempdimb}{#1}}}

\deffootnote[.5em]{1.5em}{1.5em}%
  {\makebox[.5em][l]{\rlap{\thefootnotemark}}}%

\begin{document}
TestA
\footnote{TestfootnoteOne}

\newpage
TestB
\footnote{Long Footnote: \blindtext}
TestC
\setcounter{footnote}{10}
\footnote{Two places}

\newpage
TestD
\footnote{Long Footnote: \blindtext}
TestE
\setcounter{footnote}{123}
\footnote{Three places}
TestF
\footnote{Long Footnote: \blindtext}

\end{document}

相关内容