テンプレートを理解する

テンプレートを理解する

論文のために 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

改行のパラメータを設定します。\fussy、\sloppy、\emergencystretch、\tolerance、\hbadness の意味は何ですか?この設定は通常、過剰な表示を避けるのに適していますが、長い段落のテキストの場合は標準以下の結果になる可能性があります。参考文献の場合はおそらく許容できるでしょう。

  \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。実際にはその違いはほとんど問題にならないはずです。
  • 標準コードには、コードにハードコードされた値 ( ;[...]と; ) がある場所にカスタマイズ可能なマクロがあります。 \@biblabel{...}References\bibname
    • 特に標準クラスは を出力しますが\bibname、これはデフォルトで文献一方、あなたのコードは参考文献ハードコードされています。これは、コードと「通常の使用」における標準定義との間の目に見える唯一の違いです ( の標準定義が\def\@biblabel#1{[#1]}定義にハードコードされていると仮定)。
  • コードが\newblock開始コード内で再定義されるため、ドキュメント内のそのコマンドに加えられたすべての変更は無効になります。

私が見つけたhttp://kb.mit.edu/confluence/x/YJ47これはあなたが示したコードとほぼ同じです。Alan HoenigのTeX Unbound: フォント、グラフィックス、その他に関する LaTeX と TeX 戦略同様の定義を示す546ページこの定義は、apalike.sty.styまた、同様の慣用句を使用したLaTeX 2.09もいくつか見つかりましたenumihttp://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.styhttp://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty)。おそらく、このコードは古い LaTeX 2.09 コードからヒントを得ているのでしょうか?

関連情報