Сноски на полях мемуаров с ragged2e

Сноски на полях мемуаров с ragged2e

Я хотел бы настроить так , memoirчтобы при использовании он отображался на полях с соответствующей меткой и, желательно, переходил по страницам.\footnote{foo}foo

Есть опция \footnotesinmargin, которая дает почти то же самое, что мне нужно, только выровненная. Я хочу, чтобы она использовала ragged2eи изменяла выравнивание на основе четной/нечетной страницы, чтобы примечание на полях всегда было смещено к основной текстовой области и позволяло переносить слова сбоку от края.

\documentclass[12pt, draft]{memoir}
\footnotesinmargin
\usepackage{polyglossia}
\setmainlanguage{english}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Ligatures=TeX,Numbers=OldStyle]{Minion Pro}
\usepackage{kantlipsum}

\begin{document}
\kant[1]\footnote{\kant[1]}
\kant[2]\footnote{\kant[2]}
\kant[3-5]
\end{document}

Возможный частичный обходной путь

Я вспомнил хорошую диссертацию, основанную на шаблоне классической диссертации, и нашелисточниккоторый действительно содержит возможное решение:

\usepackage{marginnote}
\usepackage{ragged2e}
\newcommand{\sidemark}[1]{#1.{\:}}

\newcommand{\marginelement}[2][0]{%
  \marginnote{%
    \strictpagechecktrue
    \checkoddpage
    \ifoddpage%
      \RaggedRight\footnotesize%
    \else%
      \RaggedLeft\footnotesize%
    \fi%
    #2%
  }[#1\onelineskip]%
}%

\newcommand{\sidenote}[2][0]{%
  \footnotemark%
  \ignorespaces%
  \marginelement[#1]{%
    \sidemark{\thefootnote}%
    \ignorespaces#2%
  }%
  \unskip%
}%

Тем не менее, я бы все же предпочел решение, специфичное для мемуаров, с переопределением сносок при использовании опции\footnotesinmargin в основном ради портативности. Этот обходной путь такжене работает с hyperref(гипертекстовой связи нет) ине разрывается на страницахавтоматически.

решение1

Я наконец-то понял это, но пока не собираюсь принимать этот ответ, потому что считаю, что его можно сделать лучше.

Я объединяю использование \footnoteс опцией \footnotesinmarginи \sidefootnote. Первая может использоваться для создания заметки на полях, вертикально выровненной с контрольной отметкой, и предназначена для коротких заметок, которые не разбиваются на страницы, в то время как вторая выравнивается по низу страницы, разбивается на страницы и предназначена для более длинных заметок или если у вас заканчивается место.

Оба они взламываются таким образом, чтобы стать \RaggedRightили \RaggedLeftв зависимости от того, является ли страница, на которой они отображаются, четной или нечетной, с помощью этого кода:

Измените поведение \footnote:

\makeatletter  % All between \makeatletter and \makeatother originally located in memoir.cls
\renewcommand{\@footnotetext}[1]{%
  \ifm@mfnmargin%   use marginpar
    \marginpar{%
    \def\baselinestretch{\m@m@footnote@spacing}%
    \reset@font
    \foottextfont
    \protected@edef\@currentlabel{%
      \csname p@footnote\endcsname\@thefnmark}%
    \color@begingroup
      \@makefntext{\ignorespaces
        \strictpagechecktrue         % <-- Start of change
  \checkoddpage
  \ifoddpage
    \scriptsize\RaggedRight
  \else
    \scriptsize\RaggedLeft
  \fi #1}%                             <-- End of change
    \color@endgroup}%
  \else% regular feet
    \insert\footins{%
    \def\baselinestretch{\m@m@footnote@spacing}%
    \reset@font
    \foottextfont
    \@preamfntext
    \hsize\columnwidth
    \protected@edef\@currentlabel{%
      \csname p@footnote\endcsname\@thefnmark}%
    \color@begingroup
      \@makefntext{%
        \rule\z@\footnotesep\ignorespaces{\foottextfont #1}%
        \@finalstrut\strutbox}%
    \color@endgroup}%
  \fi%
  \m@mmf@prepare}
\makeatother
\footnotesinmargin

Измените поведение \sidefootnote:

\renewcommand{\sidefoottextfont}{%
  \strictpagechecktrue
  \checkoddpage
  \ifoddpage
    \scriptsize\RaggedRight
  \else
    \scriptsize\RaggedLeft
  \fi
 }%

Дополнительные модификации

Вы также можете добавить

\letcountercounter{sidefootnote}{footnote}

если вы хотите объединить их счетчики в один, и

\setlength{\footmarkwidth}{0em}
\setlength{\footmarksep}{-\footmarkwidth}
\setlength{\footparindent}{1em}

изменить внешний вид \footnoteпримечаний для приведения их в соответствие \sidefootnote.

Наконец, я должен сказать, что TeX — это олицетворение хаоса.

решение2

Вы хотите манипулировать \foottextfont.

Что-то вроде этого должно сработать:

\documentclass[12pt, draft]{memoir}
\usepackage{ragged2e}
\footnotesinmargin
\renewcommand{\foottextfont}{%
  \strictpagechecktrue
  \checkoddpage
  \ifoddpage
    \scriptsize\RaggedRight
  \else
    \scriptsize\RaggedLeft
  \fi
 }%
\usepackage{marginfix}
\usepackage{polyglossia}
\setmainlanguage{english}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Ligatures=TeX,Numbers=OldStyle]{Minion Pro}
\usepackage{kantlipsum}

\begin{document}
\kant[1]\footnote{\kant[1]}
\kant[2]\footnote{\kant[2]}
\kant[3-5]
\end{document}

Обратите внимание, что при таком тяжелом материале полей шансы на то, что вы сможете правильно разместить заметки, невелики. Я столкнулся с похожей проблемой с моей диссертацией и в итоге увеличил поле, чтобы не было проблемы, как в этом примере (где сноска № 2 оказалась не на той странице).

решение3

Я не уверен, как сделать так, чтобы он разбивался на страницы, но для обоснования есть очень простое решение.

Фон

Класс memoirпредоставляет \mpjustificationкоманду, которая включается путем вызова одного из следующих методов:

  1. \marginparmargin{}

outerявляется значением по умолчанию, которое устанавливает заметки на полях на переднем крае. Это также устанавливает команду ниже.

  1. \setmpjustification{}{}

\raggedleftи \raggedrightявляются значениями по умолчанию, которые вы можете изменить \RaggedLeftв \RaggedRightпакете ragged2e.

Команда \mpjustificationвыровняет следующий текст в зависимости от того, на какой странице он находится.

Решение

Манипулировать \foottextfontкомандой недостаточно, поскольку это просто команда, которая появляется внутри сноски, а не перед ней. По сути, вам нужно настроить выравнивание до того, как сноска будет выведена вообще. Это очень просто, просто добавьте следующее после любых команд оформления сноски:

\let\oldfootnot\footnote
\renewcommand*{\footnote}[1]{\oldfootnote{\mpjustification#1}}

\footnoteтеперь текст будет располагаться на полях, выровненным по ширине блока текста.

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