Понимание шаблона

Понимание шаблона

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

\makeatletter
 \def\thebibliography#1{\chapter*{References\@mkboth
  {REFERENCES}{REFERENCES}}\list
  {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
\advance\leftmargin\labelsep
\usecounter{enumi}}
\def\newblock{\hskip .11em plus .33em minus .07em}
\sloppy\clubpenalty4000\widowpenalty4000
\sfcode`\.=1000\relax}
\makeatother

Это прямо перед библиографией.
Кто-нибудь может помочь мне понять этот загадочный язык?

решение1

С немного другим отступом код выглядит так:

\makeatletter
\def\thebibliography#1{%
  \chapter*{References\@mkboth{REFERENCES}{REFERENCES}}%
  \list
    {[\arabic{enumi}]}
    {\settowidth\labelwidth{[#1]}%
     \leftmargin\labelwidth
     \advance\leftmargin\labelsep
     \usecounter{enumi}}%
  \def\newblock{\hskip .11em plus .33em minus .07em}%
  \sloppy
  \clubpenalty4000
  \widowpenalty4000
  \sfcode`\.=1000\relax}
\makeatother

Он изменяет команду \thebibliography, которая составляет основу начального кода

\begin{thebibliography}{<longest label>}
\bibitem{<key>} <entry text>
\end{thebibliography}

В деталях

  \chapter*{References\@mkboth{REFERENCES}{REFERENCES}}%

Сначала код набирает ненумерованную главуРекомендациии добавляет заголовки с обеих сторон, читаяИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА.

  \list
    {[\arabic{enumi}]}

Библиография набирается в виде списка с использованием счетчика enumi(немного необычно, стандартные реализации используют счетчик enumiv, но обычно это не имеет значения). Номер метки/метка заключены в квадратные скобки

    {\settowidth\labelwidth{[#1]}%
     \leftmargin\labelwidth
     \advance\leftmargin\labelsep
     \usecounter{enumi}}%

Это стандартный набор действий, который позволяет создать список с разумными полями для данного сценария.

  \def\newblock{\hskip .11em plus .33em minus .07em}%

Определяет дополнительное растягиваемое пространство, которое \newblockвставляет. \newblock— это команда, выдаваемая многими стилями библиографии для разделения более крупных блоков информации в библиографии. Она обеспечивает визуальное разделение и может помочь улучшить разрыв строки благодаря своей дополнительной растяжимости.

  \sloppy

Устанавливает параметры для разрыва строки, см.Что означает \суетливый, \небрежный, \экстренно растянутый, \терпимость, \плохой?. Эта настройка обычно хороша для избежания переполнения, но может давать неудовлетворительный результат для длинных абзацев текста. Для библиографии это, вероятно, приемлемо.

  \clubpenalty4000
  \widowpenalty4000

Устанавливает параметры для контроля вдов и сирот. СмотретьКак предотвратить появление линий вдовства/сиротства?иhttps://texfaq.org/FAQ-widows.

  \sfcode`\.=1000\relax

Отключить больший пробел после предложения в конце .s в библиографии. Смотрите такжеДвойной пробел между предложениями.


По сравнению со стандартным определением в report.cls(оно такое же в book.clsи лишь немного отличается в article.cls)

\newenvironment{thebibliography}[1]
     {\chapter*{\bibname}%
      \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}

отметим следующие различия:

  • Ваш код переопределяет только начальный код (предположительно, конечный код остается неизменным).
  • Ваш код использует enumiвместо enumiv. На практике эта разница вряд ли имеет значение.
  • В стандартном коде есть настраиваемые макросы в некоторых местах, где ваш код имеет жестко заданные значения ( [...]vs \@biblabel{...}; Referencesvs \bibname; ).
    • В частности, стандартные классы будут печатать \bibname, что по умолчанию равноБиблиография, в то время как ваш код имеетРекомендациижестко закодировано. Это, пожалуй, единственное видимое различие между вашим кодом и стандартным определением для «нормального использования» (предполагая стандартное определение \def\@biblabel#1{[#1]}, которое жестко закодировано в вашем определении).
  • Поскольку ваш код переопределяется \newblockв начальном коде, все изменения, внесенные в эту команду в документе, будут недействительными.

Кстати, я нашелhttp://kb.mit.edu/confluence/x/YJ47который рекомендует почти тот же код, что вы показали. Алана ХенигаTeX Unbound: стратегии LaTeX и TeX для шрифтов, графики и многого другогопоказывает похожее определение настр. 546. Определение по стилю очень похоже на то, что вapalike.sty. Я также нашел несколько LaTeX 2.09 .styс похожими идиомами, использующими enumi(http://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.sty,http://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty). Может быть, код вдохновлен старым кодом LaTeX 2.09?

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