文書を書くときに、LaTeX ではなく TeX (またはプレーン TeX) を使用する方が望ましい状況はありますか?
答え1
TeXは、何が起こっているのかを完全に理解したい場合や、完全な制御を行いたい場合に便利です。原理的にはLaTeXでも可能ですが、理解すべきことがさらに多くあります。(つまり、LaTeXは簡単だがしかし単純一方、プレーン TeX はシンプルですが簡単ではありません。ソフトウェア設計に関する関連講演。)
TeX はタイプセッティング用のツールであり、LaTeX はドキュメント作成システムです。私の意見では、TeX はプリンター/タイプセッターの役割を果たしたいときに便利であり、LaTeX は著者の役割を果たしたいときに便利です。
2 番目の点について詳しく説明します。昔、本は次のように作成されていました。
の著者原稿(本のコンテンツ)を手書き(紙にペンや鉛筆で)またはタイプライターなどで書き、その後(編集や校正などを経た後)、印刷業者(人)に送ります。
のプリンター(機械ではなく人間です!) このコンテンツを受け取ってページに変換する仕事は、金属活字を拾い上げて (文字ごとに)、等長の行に間隔を空け、あちこちにスペースを追加するなどです。(文字通り、活字を組むのでタイプセッターと呼ばれます。)
TeX はもともと後者の作業を支援するために書かれました (Knuth はすでにほとんどのコンテンツを持っており、彼は自分の本の第 2 版 (TAOCP Vol 2) を制作しているだけでした)。その後、Leslie Lamport は、これは著者にとってあまりにも低レベルすぎることに気づき、LaTeX を考案しました。したがって、プレーン TeX で本を一から書くことはお勧めできません。おそらく、LaTeX と同じように、独自の複雑なマクロを作成することになるでしょう。ただし、すでに別の形式でコンテンツがあり、特定のサイズのページに非常に固有の問題を解決したいだけの場合は、LaTeX よりもプレーン TeX (できるだけ少ないマクロを使用) を使用する方が簡単な場合があります。
最初のポイントのやや些細な例を挙げると、フォント変更コマンドについて考えてみましょう。Plain TeX では、「次のフォントの使用を開始する」という方法、つまり「Computer Modern italic at 9pt」のような具体的な方法が生成されます。もちろん、その最後でローマン体に戻したいでしょうから、このコマンドをグループで囲むように注意する必要があります。しかし、それだけではありません。おそらく強調のためにイタリック体を使用しているでしょうし、強調されているものの中でさらに強調したい場合は、慣例的にローマン体に戻します。また、太字の中で強調したい場合は、通常のイタリック体ではなく、太字イタリック体に切り替える必要があります。同様に、フォントが大きい場合は、大きいイタリック体フォントに切り替える必要があります。このようなことはすべて、LaTeX のデフォルトによって\emph
自動的に行われます。これは、文書を書いているときに通常必要なことです。しかし、何らかの理由で、どのフォントがどこで使用されるかを明示的に制御したい場合、LaTeX でそれをどのように行うかがわからないかもしれません。そして、それがわかったときには、典型的な LaTeX とはかけ離れた、プレーンな TeX に近いものを使用していることになります。
ブルーノ・ル・フロックのもう一つの例を挙げます。unravel
パッケージ。LaTeX\newcommand
とプレーンな TeXを実行したときに内部で何が起こるかを比較します\def
。
\documentclass{article}
\usepackage{unravel}
\begin{document}
\unravel{\newcommand*{\foo}[1]{bar(#1)}} % The LaTeX way
\unravel{\def\foo#1{bar(#1)}} % The plain-TeX way
\foo{3}
\end{document}
で印刷するとunravel
、前者は 126 ステップかかり、後者は 2 ステップかかります。この例は、LaTeX とプレーン TeX のその他の多くの相違点を示しています。
- プレーン TeX の方法は技術的には LaTeX でもまだ利用可能ですが、推奨されていません。
- プレーン TeX マークアップは、多くの場合、短くすることができます (より少ない操作で: 次のポイントを参照)。
- LaTeX の方法は、経験から生まれたものであり、追加の保護機能 (この場合、既存のコマンドを誤って再定義してしまうという非常によくある可能性に対する保護) を備えているため、おそらくほとんどの著者が望んでいる方法でしょう。
- それでも、全体的には、LaTeX を使用する人のうち、舞台裏で何が行われているかすべてを把握している人は
\newcommand
ほとんどいないため、何が起こっているかを正確に理解することはあまり役に立ちません。
さらに別の例として(これが最後だと約束します)、箇条書きリストを取得する標準的な LaTeX の方法を比較します。
\documentclass{article}
\begin{document}
Some text.
\begin{itemize}
\item first
\item second
\end{itemize}
More text.
\end{document}
Knuth が次のように説明していますtexbook.tex
(10 ページに対応):
% TeXbook uses "\input manmac"; for this example just need the following from it.
\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
% These 3 are already in plain.tex, reproduced here as they may be less familiar.
\def\hang{\hangindent\parindent}
\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
\def\item{\par\hang\textindent}
Some text.
\nobreak\medskip
\item\bull first
\smallskip
\item\bull second
\medbreak\noindent
More text.
\bye
「Some text... More text」を と で囲む\tracingmacros=1
と\tracingmacros=0
、LaTeX の場合は行数が約 25 倍になります。さらに重要なのは、LaTeX の方法の方がおそらく著者の考えに近いこと、そして TeX の方法では行われているすべてのタイプセッティングが明確に示されることです。
答え2
この質問には回答がありません。実際、これは標準的な「意見に基づく」クローズ理由に該当します。しかし、とにかく回答を試みます。
TeXはマクロ拡張言語であり、
LaTeX はマクロのセットとして定義されているため、LaTeX で記述するすべての内容は、最終的には TeX プリミティブのシーケンスに展開されます。
逆に、TeX ではマクロを定義できるため、プリミティブ (initex) またはプレーン TeX から始めて、LaTeX と同等のマクロを定義できます。
したがって、ある程度、機能は同一です。大多数の人にとって、ほとんどの場合、LaTeX を使用するのが最善です。技術的な長所と短所はともかく、LateX は基本的に、TeX タイプセッターでの実装とは別の意味を持つコミュニケーション言語を形成し、共通の理解を持つ共通言語で書くことには利点があるからです。独自の TeX マクロを記述すると、同等のドキュメントをタイプセットしたとしても、そのドキュメントは他の人や他のシステムにとって理解しにくくなります。
共通言語の側面は別として、LaTeX マクロは必ずしも現在選択する実装ではありません (はるかに小型のマシン用に設計されています)。しかし、何十年にもわたって何百万人ものユーザーによって使用されており、より深刻なバグのほとんどは修正されているか、回避策が知られている可能性があります。「独自の」ドキュメント マクロを作成すると、理論上は同様に堅牢になる可能性がありますが、可能性は低く、何百万時間もの人手をかけたテスト時間を上回ることは困難です。
私は 25 年以上 LaTeX を保守するチームの一員なので、これはおそらく最も客観的で中立的な比較ではないかもしれませんが、それでも...
今は 12 月なので、私が時々プレーン tex を使用していることを指摘するには良い時期かもしれません。たとえば、しばらく前に書いたこのプレーン tex は、長年にわたって使用されてきました。
\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye
答え3
数年前、私はプレーン TeX の学習に力を入れました。その理由は次のとおりです。
- LaTeXの出力は見苦しいと思う
- 私はConTeXtを学んでいましたが、そのドキュメントでは複雑なことをしたいときにはプレーンTeXに切り替えることを勧めています。
特に LaTeX の場合、表面上はユーザーが何かについて考える必要がないようにするために何らかの決定を下したにもかかわらず、その決定が気に入らないことがよくあります。選択肢は、LaTeX コードを読んで何が起こっているのか、どのように起こっているのかを調べる (簡単ではありません)、この小さな問題を修正するパッケージを見つける (多くの場合は可能ですが、不快に感じることがあります)、または我慢するかのいずれかです。
プレーン TeX では、どのような動作をしても、その動作の責任はユーザーにあります。したがって、動作が気に入らない場合は、それはユーザーの責任であり、何を間違えたかを理解できます。または、少なくとも tex.SE で質問してください。:)
ちなみに、プレーン TeX を学習したい場合は、XeTeX または LuaTeX から始めることをお勧めします。これらのエンジンではフォントの状況がはるかに簡単だからです。
答え4
私は長年の LaTeX ユーザーですが (TeXbook を理解するのは難しかった)、この問題にはコンピュータ プログラミングの観点から取り組んでいます。プログラミングに初めて触れたのは、地元の技術専門学校で受けたマシン コード (0 と 1 の羅列) に関するコースでした。特に、その大学にはコンピュータがなく、提出したコードを手動でチェックする以外に方法がないことを知ったときは、本当にひどいものでした。その後は、ランダムな 0 と 1 のシーケンスを提出するだけで簡単にできました。しかし、基本的にコンピュータはマシン コードを理解していました。
その後、簡単に理解できるとは言えないまでも、少なくともある程度は読めるアセンブリ コードが登場しました。また、アセンブリをマシン コードに変換するプログラムもありました。
その後、FORTRAN や C、Java などのプログラミング言語が登場し、物事を語る高度な方法が提供されました。これは、人間の理解に非常に適していました (コンピューター プログラマーであれば)。これらの言語には、基本的に言語をアセンブリに変換するコンパイラが付属しており、次にそれがマシン コードに変換され、コンピューターが素晴らしい処理を実行できるようになりました。
私の考えでは、TeX は望みどおりに実行できますが、アセンブリ コードに似ています。一方、LaTeX は FORTRAN や Java に似ており、望みどおりのことを記述するのがはるかに簡単です。プログラミング言語の LaTeX が TeX に「変換」されるのと同じです。
高い表現レベルで操作しますか、それとも低いレベルで操作しますか? 低い方がプロセッサ効率が高くなるかもしれませんが、高い方が一般的に理解しやすくなります。
TeX ドキュメントは LaTeX ドキュメントよりも速くコンパイルされる可能性がありますが、ここでは数秒 (の数分の 1) の話です。これを、ニーズに合わせて TeX ドキュメントを作成するのにかかる時間と、TeX でコーディングするために必要なソリューションの多くを提供する LaTeX の時間と比較してください。