![Compreendendo o modelo](https://rvso.com/image/391708/Compreendendo%20o%20modelo.png)
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 \thebibliography
que 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.cls
e 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
enumi
em vez deenumiv
. 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{...}
;References
vs\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).
- Em particular, as classes padrão seriam print
- Como seu código é redefinido
\newblock
no 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 .sty
s 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?