![Entendiendo la plantilla](https://rvso.com/image/391708/Entendiendo%20la%20plantilla.png)
Para mi tesis me entregaron una plantilla TeX y traté de entender el código antes de hacer algo redundante o inútil. Ya resolví la mayor parte, pero luego hay este fragmento de código que no puedo descifrar:
\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á justo antes de la bibliografía.
¿Alguien puede ayudarme a entender este lenguaje arcano?
Respuesta1
Con una sangría ligeramente diferente, el código dice
\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
Modifica el comando \thebibliography
que forma la base del código de inicio de
\begin{thebibliography}{<longest label>}
\bibitem{<key>} <entry text>
\end{thebibliography}
En detalle
\chapter*{References\@mkboth{REFERENCES}{REFERENCES}}%
Primero, el código escribe un capítulo sin numerar.Referenciasy agrega cabezas corrientes en ambos lados leyendoREFERENCIAS.
\list
{[\arabic{enumi}]}
La bibliografía se compone como una lista usando el contador enumi
(un poco inusual, las implementaciones estándar usan el contador enumiv
, pero normalmente eso no importa). El número de etiqueta/etiqueta está entre corchetes
{\settowidth\labelwidth{[#1]}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\usecounter{enumi}}%
Esto es algo estándar que configura una lista con márgenes razonables para este escenario.
\def\newblock{\hskip .11em plus .33em minus .07em}%
Define el espacio extensible adicional que \newblock
se inserta. \newblock
es un comando emitido por muchos estilos de bibliografía para separar bloques más grandes de información en la bibliografía. Permite la separación visual y puede ayudar a mejorar el salto de línea con su elasticidad adicional.
\sloppy
Establece parámetros para saltos de línea, consulte¿Cuál es el significado de \quissy, \sloppy, \emergencystretch, \tolerance, \hbadness?. Esta configuración suele ser buena para evitar el contenido excesivo, pero podría dar resultados deficientes para párrafos de texto más largos. Para la bibliografía eso probablemente sea aceptable.
\clubpenalty4000
\widowpenalty4000
Establece parámetros para controlar viudas y huérfanos. Ver¿Cómo evito las líneas viudas/huérfanas?yhttps://texfaq.org/FAQ-widows.
\sfcode`\.=1000\relax
Deshabilite el espacio más grande después de la .
s que finaliza la oración en la bibliografía. Ver tambiénDoble espacio entre oraciones.
En comparación con la definición estándar en report.cls
(es la misma en book.cls
y solo ligeramente diferente en 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}
observamos las siguientes diferencias:
- Su código solo redefine el código inicial (presumiblemente el código final no se modifica).
- Su código usa
enumi
en lugar deenumiv
. En la práctica, esa diferencia apenas debería importar. - El código estándar tiene macros personalizables en algunos lugares donde su código tiene valores codificados (
[...]
vs\@biblabel{...}
;References
vs\bibname
; ).- En particular, las clases estándar imprimirían
\bibname
, que por defecto esBibliografía, mientras que su código tieneReferenciascodificado. Esta es aproximadamente la única diferencia visible entre su código y la definición estándar de "uso normal" (asumiendo la definición estándar de\def\@biblabel#1{[#1]}
, que está codificada en su definición).
- En particular, las clases estándar imprimirían
- Dado que su código se redefine
\newblock
en el código de inicio, todos los cambios que se realicen en ese comando en el documento serán nulos.
FWIW encontréhttp://kb.mit.edu/confluence/x/YJ47que recomienda prácticamente el código que mostraste. Alan HoenigTeX Unbound: estrategias LaTeX y TeX para fuentes, gráficos y másmuestra una definición similar enpag. 546. La definición es bastante similar en estilo a la deapalike.sty
. También encontré varios LaTeX 2.09 .sty
con modismos similares usando enumi
(http://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.sty,http://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty). ¿Quizás el código esté inspirado en el código LaTeX 2.09 anterior?