Compreendendo o modelo

Compreendendo o modelo

para minha tese, recebi um modelo TeX e estava tentando entender o código antes de fazer algo redundante ou inútil. Eu descobri a maior parte, mas há um trecho de código que não consigo decifrar:

\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

Está logo antes da bibliografia.
Alguém pode me ajudar a entender essa linguagem misteriosa?

Responder1

Com um recuo ligeiramente diferente, o código lê

\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

Ele modifica o comando \thebibliographyque forma a base do código inicial do

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

Em detalhe

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

Primeiro, o código compõe um capítulo não numeradoReferênciase adiciona cabeças em execução em ambos os lados lendoREFERÊNCIAS.

  \list
    {[\arabic{enumi}]}

A bibliografia é escrita como uma lista usando o contador enumi(um pouco incomum, as implementações padrão usam o contador enumiv, mas normalmente isso não importa). O número/rótulo da etiqueta está entre colchetes

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

Isso é padrão que configura uma lista com margens razoáveis ​​para esse cenário.

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

Define o espaço extensível adicional que \newblocké inserido. \newblocké um comando emitido por muitos estilos de bibliografia para separar blocos maiores de informações na bibliografia. Permite a separação visual e pode ajudar a melhorar a quebra da linha com sua elasticidade adicional.

  \sloppy

Define parâmetros para quebra de linha, consulteQual é o significado de \exigente, \sloppy, \emergencystretch, \tolerance, \hbadness?. Essa configuração geralmente é boa para evitar excesso de texto, mas pode fornecer resultados abaixo da média para parágrafos de texto mais longos. Para a bibliografia isso provavelmente é aceitável.

  \clubpenalty4000
  \widowpenalty4000

Define parâmetros para controlar viúvas e órfãos. VerComo evito filas de viúvas/órfãs?ehttps://texfaq.org/FAQ-widows.

  \sfcode`\.=1000\relax

Desative o espaço maior após os finais de frase .na bibliografia. Veja tambémEspaço duplo entre frases.


Em comparação com a definição padrão em report.cls(é a mesma book.clse apenas ligeiramente diferente em 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}

notamos as seguintes diferenças:

  • Seu código redefine apenas o código inicial (presumivelmente o código final permanece inalterado).
  • Seu código usa enumiem vez de enumiv. Na prática, essa diferença dificilmente deveria importar.
  • O código padrão possui macros personalizáveis ​​em alguns lugares onde seu código possui valores codificados ( [...]vs \@biblabel{...}; Referencesvs \bibname; ).
    • Em particular, as classes padrão seriam print \bibname, cujo padrão éBibliografia, enquanto seu código temReferênciascodificado. Esta é a única diferença visível entre o seu código e a definição padrão para 'uso normal' (assumindo a definição padrão de \def\@biblabel#1{[#1]}, que está codificada na sua definição).
  • Como seu código é redefinido \newblockno código inicial, todas as alterações feitas nesse comando no documento serão nulas.

FWIW eu encontreihttp://kb.mit.edu/confluence/x/YJ47que recomenda praticamente o código que você mostrou. Alan HoenigTeX Unbound: estratégias LaTeX e TeX para fontes, gráficos e muito maismostra uma definição semelhante empág. 546. A definição é bastante semelhante em estilo àquela emapalike.sty. Também encontrei vários LaTeX 2.09 .stys com expressões semelhantes usando enumi(http://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.sty,http://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty). Talvez o código seja inspirado no código LaTeX 2.09 mais antigo?

informação relacionada