Grundlegendes zur Vorlage

Grundlegendes zur Vorlage

für meine Abschlussarbeit bekam ich eine TeX-Vorlage und versuchte, den Code zu verstehen, bevor ich irgendetwas Überflüssiges oder Nutzloses tat. Das meiste habe ich herausgefunden, aber dann gibt es da diesen Codeabschnitt, den ich nicht entziffern kann:

\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

Es steht direkt vor der Bibliographie.
Kann mir jemand helfen, diese geheimnisvolle Sprache zu verstehen?

Antwort1

Mit leicht anderer Einrückung lautet der Code

\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

Es ändert den Befehl \thebibliography, der die Grundlage für den Startcode von bildet

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

Im Detail

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

Zunächst setzt der Code ein unnummeriertes KapitelVerweiseund fügt auf beiden Seiten Kolumnenüberschriften mit dem Text hinzuVERWEISE.

  \list
    {[\arabic{enumi}]}

Die Bibliographie wird als Liste mit dem Zähler gesetzt enumi(etwas ungewöhnlich, die Standardimplementierungen verwenden den Zähler enumiv, aber normalerweise spielt das keine Rolle). Die Bezeichnungsnummer/Bezeichnung wird in eckige Klammern gesetzt.

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

Dies ist Standardmaterial, das eine Liste mit sinnvollen Rändern für dieses Szenario erstellt.

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

Definiert den zusätzlichen dehnbaren Raum, der \newblockeingefügt wird. \newblockist ein Befehl, der von vielen Bibliografiestilen ausgegeben wird, um größere Informationsblöcke in der Bibliografie zu trennen. Es ermöglicht eine visuelle Trennung und kann durch seine zusätzliche Dehnbarkeit dazu beitragen, den Zeilenumbruch zu verbessern.

  \sloppy

Legt Parameter für den Zeilenumbruch fest, sieheWas bedeutet \fussy, \sloppy, \emergencystretch, \tolerance, \hbadness?. Diese Einstellung ist normalerweise gut geeignet, um Überfüllungen zu vermeiden, kann aber bei längeren Textabschnitten zu unterdurchschnittlichen Ergebnissen führen. Für die Bibliographie ist das wahrscheinlich akzeptabel.

  \clubpenalty4000
  \widowpenalty4000

Legt Parameter zur Steuerung von Hurenkindern und Hurenkindern fest. SieheWie verhindere ich Hurensöhne/Waisenkinder?Undhttps://texfaq.org/FAQ-widows.

  \sfcode`\.=1000\relax

Deaktivieren Sie den größeren Abstand nach satzendendem .„s“ in der Bibliographie. Siehe auchDoppelter Abstand zwischen den Sätzen.


Im Vergleich zur Standarddefinition in report.cls(es ist dasselbe in book.clsund unterscheidet sich nur geringfügig in 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}

Wir stellen folgende Unterschiede fest:

  • Ihr Code definiert nur den Anfangscode neu (der Endcode bleibt vermutlich unverändert).
  • Ihr Code verwendet enumianstelle von enumiv. In der Praxis sollte dieser Unterschied kaum eine Rolle spielen.
  • Der Standardcode verfügt an einigen Stellen über anpassbare Makros, wo Ihr Code fest codierte Werte hat ( [...]vs \@biblabel{...}; Referencesvs \bibname; ).
    • Insbesondere würden die Standardklassen drucken \bibname, was standardmäßigLiteraturverzeichnis, während Ihr CodeVerweisefest codiert. Dies ist so ziemlich der einzige sichtbare Unterschied zwischen Ihrem Code und der Standarddefinition für „normale Verwendung“ (unter der Annahme der Standarddefinition von \def\@biblabel#1{[#1]}, die in Ihrer Definition fest codiert ist).
  • Da Ihr Code \newblockim Anfangscode neu definiert wird, sind alle an diesem Befehl im Dokument vorgenommenen Änderungen ungültig.

FWIW, ich habe gefundenhttp://kb.mit.edu/confluence/x/YJ47das empfiehlt so ziemlich den Code, den Sie gezeigt haben. Alan HoenigsTeX Unbound: LaTeX- und TeX-Strategien für Schriftarten, Grafiken und mehrzeigt eine ähnliche Definition aufS. 546. Die Definition ist im Stil recht ähnlich der inapalike.sty. Ich habe auch mehrere LaTeX 2.09 .stys mit ähnlichen Redewendungen gefunden, die enumi(http://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.sty,http://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty). Vielleicht ist der Code von älterem LaTeX 2.09-Code inspiriert?

verwandte Informationen