\chapter{\TeX} % 第十一章
■ このスレッドは過去ログ倉庫に格納されています
今のtexはなんで実装されているのですか? Wikiによるとクヌース先生がWEBという言語で書いて、それをPascalやCに変換しているとありますが、 今現在もクヌース先生がWEBで書いたTexをCにコンバートしてそれをコンパイルしたのを使ってるのですか? だれかがC++で書き直してそれが使われてるとかじゃないのですか? わからないことがあるので教えてください。 1: \makeletter 2: \def\kenten#1{% 3: \ifvmode \leavemode \else \hskip \kanjiskip\fi 4: \setbox1= \hbox to \z@{・\hss}% 5: \ht1= .63zw 6: \@kenten#1 \end} 7: \def \@kenten#1{% 8: \ifx#1 \end \let\next=\relax \else 9: \raise .63zw\copy1\nobreak #1 \hskip\kanjiskip\relax 10: \let\next= \@kenten 11: \fi \next} 12:\makeatother という奥村先生の本の圏点を入れるコードです。 \kenten{強調}で強調の上に点が現れます。 \kentenと\@kentenの二つのコードからなっています。 わからないところは A: 3:の\hskip \kanjiskip ですが、hskipにはデフォールとで数字が入っていてその分だけスキップ するのでしょうか? B: それから 4:のto \z@{・\hss}ですが、ボックスの幅を0ポイントとしてしまうと、・\hss 自体が幅がないので潰れてしまってなくなるんじゃないかなと思うんですが、 なくならないのはなぜでしょうか? C: 9: \raise .63zw\copy1\nobreak #1 \hskip\kanjiskip\relax のところですが、まず\raise .63zw\copy1\nobreakまでが「・」を上に 書く部分ですよね。#1はkenten{強調}とした場合の「強調」(kentenというコマンドの 引数)です、この9の部分は強調の上に点を描くということをしているのでしょうか? (「・」の部分はraiseをし、そのあとはそうしてないことによって) D: 最後の@kentenもわかりません。tail recursionというものだそうです。 幾らかでも教えていただけるかなと期待をして書き込ませていただきました。 奥村先生の本面白いですよね。 latex2e入門ですが、難しいコードも書いてある。(そしてそのコードに ついての説明は十分ではない。(十分に書くと長くなりすぎるから)) 独習latex2eで調べながら理解しようとしています。(まだ最初の方ですが) D: ですが、まずは動作の概要をつかむために次のような定義で \kenten{強調} とするとどうなるかを考えてみてはいかがでしょう? \def\kenten#1{ \@kenten#1 \end} \def\@kenten#1{ \ifx#1 \end \let\next=\relax \else \let\next= \@kenten \fi \next} >>552 を書き直しました。>>552 はバグを含んでいます。 >>555 さん 少し待ってください \documentclass{jsarticle} \begin{document} \makeatletter \def\kenten#1{% \ifvmode\leavevmode\else\hskip\kanjiskip\fi \setbox1=\hbox to \z@{・\hss}% \ht1=.63zw \@kenten#1\end} \def\@kenten#1{% \ifx#1\end \let\next=\relax\else \raise.63zw\copy1\nobreak #1\hskip \kanjiskip\relax \let\next=\@kenten \fi\next} \makeatother \kenten{強調} \end{document} >>555 \documentclass{jsarticle} \begin{document} \makeatletter \def\kenten#1{% \@kenten#1\end} \def\@kenten#1{% \ifx#1\end \let\next=\relax\else \let\next=\@kenten \fi\next} \makeatother \kenten{強調} \end{document} だとエラーが出て概要すらつかめません。 >>557 それをコンパイルすることに意味はありません(実行結果は何も表示しないです) \kenten{強調} は \@kenten 強調\end に置き換えられ次に…と頭で考えてみてくださいということです >>552 D に関しては、for 文の例えば \@tfor を使っても実現できると思う。 要するに、1文字ずつ取ってきて、 頭の上にちょこんと「・」を乗せる ことを繰り返せば良いだけなんだから。 pxrubyパッケージの圏点コマンドでは不満足なんすかね。 >>560 圏点を打ちたいから質問をしているのではなく奥村氏の \kenten コマンドの仕組みを知りたくて質問しているんだから pxruby がどうたらとか関係ないんじゃないのか? TIPAパッケージにおいて提供されているコマンドの内、 なんの環境でもなく使える\textbetaなどのコマンドを無効にするにはどうすればいいですかね。 safeオプションなどは少し違う用途のようですし。 ギリシア語と混在させると、βがTIPAフォントのベータ記号になってしまうのですが これをギリシア語向けのフォントで表わしたいのです。 ギリシア語が出現する度に{\fontencoding{LGR}\selectfont β}などとはしたくないです。 英語と日本語の混合文書を処理するように、何ら特別な処理なくギリシア語を扱いたいのですが TIPAパッケージと共存できません……。お力を貸していただけませんか。 >>558 すみません。 もう少し教えてください。 \@kenten 強調は \nextに\@kentenを入れて、 それを繰り返していると、 強調が\endになるので、その時には \nextに\relaxを入れて、\nextを持って \@kenten強調とするということですか? 具体的にどういう感じになるんでしょう? 強調という二文字のうち一つずつ処理していく 形になるのはどうしてでしょう? >>563 ですがあとは自分で考えるというか そのうちできるようになる時には できるようになると思います。 返信は入りません。 LaTeXで均等割をするとOverfull \hboxとかの警告が生じるのが気になります。 欧文では文字の間がその文字自身と同じくらい開くことは不恰好ではあるのでしょうが 和文の組版においては自然な配置であり警告を出してほしくないです。 いま「\均等割」という命令を\makebox[#1][s]{#2}などという定義をして使っているのですが これに手を加えてOverfull関連の警告が「\均等割」マクロの処理中に発生しないようにできないですか? >>563 \kenten{強調} は \@kenten 強調\end と置き換えられ、\@kenten の定義(\def\@kenten#1{...})からとり得る引数の個数は「ただ一つ」である。 このことから \@kenten 強調\end は「 1 」は放置され、\@kenten#1{...} の引数 #1 には「 2 」が代入される。 みたいな感じかな?「 1 」「 2 」に入るものをそれぞれ考えてみてください。 ヒントって難しいね^^; >>566 ありがとうございます。 まだわかりません。僕にはまだこの コードは早いと思いました。 奥村先生の本、結構難しいですね。 LaTeX2ε辞典 増補改訂版をさらに買いました。 こういうコードは我慢して、解読しようと しないと上達しないのはわかっているので もう少し粘ってみようかなと思います。 >>567 勉強するならこんなのもあるよ 「LaTeX2eまくろの八衢」オンライン版 http://xymtex.my.coocan.jp/fujitas2/yatimata2/index.html これの書籍版のお世話になった人も多いんじゃないかな? >>563 引数の扱いについて勘違いしているんじゃないのかな? 例えば \def\tmpcs#1#2{#2#1} において \tmpcs あいう いろは の出力結果を想像したものと実際にコンパイルたものが一致しているか確認してみてはどうだろう? >>569 ありがとうございます。 \defの使い方については理解しているようです。 \def\tmpcs#1#2{#2#1} \tmpcs あいう いろは では、 いろは あいう がでます。それは知っていました。 >>568 1.1を読みました。わかりやすいですね。 >>555 さん \nextというコマンドなのですが、>>555 さんが 適当に書かれた文字列(というのか 要するに\nextという文字の並び)は 555さんが適当に作ったものなのでしょうか? それとも最初から\nextはTeXコマンドと して入っているものなのでしょうか? 申し訳ありません。教えてください >>570 少なくとも \next というのは、 「\その場でほかと干渉しない文字列名(csname)」でOKです。 闇だな (La)TeXを使うのを止めて、SATySFi か Vivliostyle を使ったらいいとおもうよ >>570 \def\tmpcs#1#2{#2#1} において \tmpcs あいう いろは とするとその出力は「いあう いろは」だよ 「#1」に「あ」「#2」に「い」が代入されて「あ」と「い」の順序が逆になる \tmpcs{あいう}{いろは} とすると「いろはあいう」だけどね 波括弧{}でグルーピングしていないもの(大雑把な言い方だけど)は一文字づつ処理される(ただし制御綴は制御綴のまま) これを参考 >>557 の \@kenten 強調\end はどうなるかを考えてみると理解できるようになるんじゃないかな? >>573 Knuth先生自身が著書の冒頭でgameと呼んでたのを思い出して knuth name of the game でぐぐてみたら全文PDF(ライオンイラスト除去版)が出てきた ttp://www.ctex.org/documents/shredder/src/texbook.pdf >>5 のリンク集に加えてもいいのかな (>>568 のurlも) LaTeXってフォントに関してはNFSSという構造化された体系があるのに \sectionや\partなどの文書構造に関しては何ら体系的にアクセスする手段を持ってないよね それこそ\DeclareHeaderみたいなコマンドが欲しい。 「どんなフォントを使うか」「見出しのあとに改行するのか」 っていう設定を\sectionコマンドを直接再\defしたりすることなく行えればいいのに。 LaTeX3では追加されることを期待している。 >>577 > 「どんなフォントを使うか」「見出しのあとに改行するのか」 各種見出しは、そんな単純に行かないよ。 >>578 そう? カウンタと相互参照に関してはLaTeX側がアクセスする手段を提供してくれているし \sectionや\chapterの定義だって多くのクラスファイルで10行そこらでしょ。 もちろんさらに細かい定義に分割できるので それらを合わせれば複雑になってしまうけど。 でもそれを言うならフォント選択機構だって単純ではないし。 >>580 型に決まった体裁の見出しなら、単純。 一般的に、各種見出しの体裁は、なんでもありな自由です。 すいません。この春からLATEXを使うこととなったのですが、 TeX Liveの最新版はどこで入手できますか? 「TeX Live 2019」などという語句をWebで検索して探したのですが その用語は見付かるもののISOのダウンロードリンクが見付かりません。。。 学校側から渡された教本には「TeX Live 2013(年の部分は適宜置き換えてください)」とあり TeX Live 2019をダウンロードしようと思ったのですが 同書にあるhttps://www.tug.org/texlive/ というリンクからTeX LiveのISOファイルをダウンロードすると TeX Live 2018という去年のバージョンになってしまいます。 TeX Liveを導入しようとしているOSはUbuntuです。 多分LATEXのプロからすればすごく下らないことだと思うのですが どうかご教示おねがいいたします。 >>582 初心者が最新版を使用することには反対です。 Ubuntuがリポジトリに準備しているTeXLiveを使いましょう。 Ubuntu (bionic) のリポジトリのTeXLiveのバージョンは texlive-full/bionic,bionic 2017.20180305-1 all TeX Live: metapackage pulling in all components of TeX Live です。 >>582 最新は2018で、2019はまだ開発版だからプログラマか人柱デバッガーでもなけりゃ用はないはずだぞ >>582 TeX Live 2019 の public release は4月30日予定だから >>584 さんのいうように TeX Live 2018 が今のところ最新版 最新版を使うのなら tlmgr restore など巻き戻しの方法をマスターしておいたほうがいいよ >>583 >>584 >>585 みなさん ありがとうございます。 私のバカな勘違いでご迷惑をお掛けしました。。。 TeX Live 2018は最新版でよかったんですね。 今年は2019年であるけれども、 まだTeX Live 2019は不安定なので末端利用者が使うのはTeX Live 2018という感じでしょうか? とりあえずTeX Live 2018を使います。 また、tlmgrというコマンドも覚えたいと思います どうもすいませんでした。。。 >>582 Ubuntuを使っているんだから、 Ubuntuの distro に含まれている TeX Live 環境を使えばいいと思います。 別に ubuntu を使っているからといってトロ臭い ubuntu のリポジトリの TeX Live を使うこともないだろ 「最新版」をなるべく使いたいという希望なんだから普通に TeX Wiki とか検索して最新版の TeX Live を使えるようにすればいいんじゃない 過去の資産とかがあるわけでもないし >>585 の tlmgr restore さえ使えれば問題ないだろ 例えばDebian sidならTeX Live 2019/devが使える >>575 ありがとうございます。 時間がかかるでしょうけど あとは自分で考えます。 LaTeXのNFSSなどの機能で 「特定のエンコーディングにおいてあるシェープを一律に別のシェープで置き換える」 ようなコマンドって用意されていますか。 \DeclareKanjiSubstitutionなどに近い機能なんですけど……。 具体的に何がしたいか↓ 設題などをスモールキャピタルで組んでいるのですが JY2エンコーディングに{sc}が登録されていないので コンパイルする度にLaTeX Warningがずらずら表示されます。 これを止めたいです。 方法の一つとしては \DeclareFontShape{JY2}{mc}{m}{sc}{<->ssub*mc/m/n}{} というように一つ一つ設定すればいいのですが これがJT2なども含めて幾つもある(多書体を設定している)ので まあ,端的に言って面倒なのです。 ですので \SomeCS{JY2}{sc}{n} のような形式で一括にシェープ置換の設定ができればと思っています。 どうかお知恵を貸してください。 >>592 ないので、\@for で \DeclareFontShape{JY2}{mc}{m}{sc}{<->ssub*mc/m/n}{} をぐるぐるまわしちゃって。 みなさんエディターは何使ってますか? 最近vscodeに興味を持ったんですが、使い勝手はどうでしょうか? それとおすすめエディターはありますか? >>594 Vim使えVim ……まあマジメに、CLIでの作業に慣れてることが前提にはなるけど Vimはおすすめ。makeと組み合わせてエラー箇所にジャンプする みたいな統合開発環境っぽいことができるのに それらに比べて爆速で軽量。 あとconceal機能って言って\pmを±に表示するようなものもある。 好みにもよるが、俺は\pmってあるより±ってあった方が見易いと感じる。 >>555 さん >>556 の \def\@kenten#1{% \ifx#1\end \let\next=\relax\else \raise.63zw\copy1\nobreak #1\hskip \kanjiskip\relax \let\next=\@kenten \fi\next} の部分がわかったような気がします。 \kenten{強調}とすると、 \@kenten 強調となって、 強だけが#1のところに入って、 点をcopy1で書いて(\copy1のところ)、 強を書いて(\nobreak #1のところ) スキップをして、 \@kentenを再びで、調の取得は、 よくわからんと... 何れにせよなんとかなるだろう ということです。 >>568 のpdfをゆっくりながら読んでいます。 sonyのdigital paperを使っています。 論文だと枚数が多くないので印刷して読むのですが、 今のようにpdfで枚数が多い場合はどうすれば いいのでしょうね?何かいいアイデアがあったら 教えてください。よろしくお願いします >>596 >\@kenten 強調となって、 >強だけが#1のところに入って、 そうそう「調\end」が取り残されて「強」だけ処理されると > \@kentenを再びで、調の取得は、 > よくわからんと... あー 「\@kenten 強」を処理すると \ifx#1\end(true)\else(false)\fi の #1 には「強」が代入されるけど、(true) と (false) のどちらの処理が行われるのかな? そうすると「調」の取得もわかるとおもうけど… >>594 Spacemacs + YaTeX を使ってます 元々 Emacs を使っていたんだけど Ctrl や Alt がちょっと辛かった Spacemacs は SPC キーを基点としていろいろな操作ができ、それがなかなか直感的なので使いやすいかな それと Vim モードで使っているんだけど Vim のテキストオブジェクトの虜になりました YaTeX の補完機能は元から指定されているものだけじゃなく自作のマクロなどにも自由自在に対応できるので好きです Emacs から Spacemacs に移行するなら Emacs や Hybrid モードじゃなくて Vim モードをオススメします それじゃないと結局「Emacs でいいじゃん」ってなって Emacs に戻ることに… >>577 jlreqクラスだと\NewTobiraHeading みたいな命令が提供されてていいよ。 2018 が frozen 今年も pretest の季節がやってきましたね。 TeX Liveの最新版がどうこうとか言ってた上の方の素人さんには朗報やなw >>594 Emacs使ってます org-modeから表とかを書き出せて便利です >>597 強は\endじゃないんでelse以下が実行されて \nextつまり\@kenten が次に来るのは わかりますがそのときなぜに\@kenten 調 と調を処理するモードに入っているのか というのがわからないんですよ >>604 >>555 の \@kenten の定義を使うと \@kenten 強調\end は \ifx 強\end \let\next=\relax\else\let\next=\@kenten\fi\next 調\end に展開されて \ifx を実行すると \next に \@kenten が代入されるから、次は \@kenten 調\end に展開されるだけだよ >>605 なんども教えていただきありがとうございます 教えていただいたことは理解できます。 「\next に \@kenten が代入される」と いうところです。 でもまだ理解できていないのでもう一つ教えてください。 調\endの\endはどこから来るのでしょう? 申し訳ありません >>605 わかりました。 強調\end が強と調\endに別れたということですね。 やっとわかった。 ありがとうございます。 それでは >>607 そうですね \@kenten コマンドは引数を「一つだけ」とるので \@kenten 強調\end は「\@kenten 強」という処理と「調\end」という文字列や制御綴に分けられますね >>611 それ末端利用者が使うべきじゃないっていうコメントを soかscかどっかで見掛けたな。 あくまでクラス・パッケージ開発用途だと。 >>612 list環境の解説が入門書に見当たらない理由はそれか。 長年の疑問が解けた気がする。 入門書ではないかもしれんがLatex2ε 階梯には載ってたよ。 dxのdを立体で書くのがめんどい。ええ方法ないかな? LaTeXのtabular環境でセルの内容をコマンドの引数にする方法を探しています。 arrayパッケージの>や<が使えると思ったのですが \begin{tabular}{|>{\somecmd{}c<{}}|} ↑こうすると(当然ですがエラーになります) セルの内容Aに対して\somecmd{A}というような命令を実行してほしいのですが どうにかできないものでしょうか……。 >>618 それって単にかっこの対応が間違っているだけなんじゃね? もう一度見なおしてみ >>619 反応ありがとうございます。 (憶測になってしまいますが) arrayパッケージの<{}や>{}では,{と}が対応している必要があり 内部で{や}を用いることができないようです。 とりあえず,やりたいこと(セルの内容に\somecmd{A}を適用する)は 別の方法が提供されているのに気付いて,無事希望通りの結果になりました。 ともかく駄スレすいませんでした。 >>620 >{}や<{}の内部でグルーピングの括弧を使いたいのなら\bgroup、\egroupを使うといけるかもかも >>621 ありがとうございます! 仰る通りの方法で望みの結果が得られました。 なるほど,\bgroupというコマンドがLaTeXカーネルで用意されているんですね……。 全然知らなかったです。マジでありがとうございます。 ある命令がどのファイルで定義されてるか調べる方法ってありますか? 具体的には\dqtdという命令が定義されているファイルを知りたいです。 例えばniceverbやtexlinksなどで使用されています。 niceverb.sty には \providecommand*{\dqtd}[1]{``#1"} %% 2012/11/27 って行があるから、自前だな。 texlive の全ファイル を grep して探したら catcodes バンドルの catchdq.sty あたりにありそうだよ。 >>629 ありがとうございます! \providecommandで定義されているということは niceverbパッケージとしては\dqtd命令が外部で定義されているかも知れない と考えているというこですね。 もうすぐTeX Live 2019が不安定版じゃなくなるね。 pretest環境だが、もうずっと luacsplain の fmt ビルドが失敗しているな。 自分が使うフォーマットではないので、報告する気になれない… csplainは多分encTeX拡張を使っているほとんど唯一のTeXマクロフォーマットなので そこら辺りに原因がありそう……。 LaTeXのNSSでフォントの大きさを相対的に上げ下げする、 \larger・\smallerみたいなコマンドありませんか? もしないとしたら、どうやって作ったらいいでしょうか。 例えば\Large命令を宣言している状態で\lager命令を使うと\LARGE命令を宣言したことになる というような動作が望みです。 よろしくお願いします。 \expanded は新しいプリミティブです。以上 LaTeXのパッケージ作成に手を出したばかりの者ですが 「必要な引数が足りない」旨を警告する簡単な方法ってないのでしょうか 有名なパッケージの実装を見るとLaTeXの内部コマンドを使い\csnameなどTeX言語をそのまま使用しています これを例えば\CheckArgumentみたいなLaTeXがパッケージ用に提供しているコマンドなどで解決したいのです LaTeXって和暦表示できる? Debian sidでTeX Live 2019/devを使ってるんだけど ↓このソースをupLaTeXとdvipdfmxでコンパイルしても日付の表記が西暦のまま。 \documentclass[uplatex,dvipdfmx,ja=standard,a4paper]{bxjsarticle} \和暦 \title{タイトル} \author{某} \begin{document} \maketitle % 中身はまだ無い。 \end{document} ↑ここまで。誰か解決策とかない? >>644 2019 pretest 環境ですが、そのソースで 令和元年 5 月 1 日 になったけど? >>645 マジっすか…… ていうかbxwarekiパッケージを使って\date{\warekitoday}と指定してさえ 「2019年」表記になってしまいました。 これ多分DebianのTeX Live設定(もしくはPackage Config)がなにか悪さをしている可能性がデカいですね ともかく、情報ありがとうございます。 >>646 log に何か warning 出てない? >>647 出てないっすね……。 ログにある、和暦関連の記録は↓ (/usr/share/texlive/texmf-dist/tex/latex/bxwareki/bxwareki.sty Package: bxwareki 2018/10/01 v0.4 ↑これくらいです。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる