Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Texdocのしくみ / texconf2024-texdoc

Watson
November 30, 2024

Texdocのしくみ / texconf2024-texdoc

TexdocはTeX Live公式のドキュメント検索ツールです。TeX Liveは世界で最も普及しているTeXディストリビューションの1つで、その構成物について充実したドキュメントを備えることを特長の1つとしています。TexdocはそのTeX Liveのもつ膨大なドキュメントの中から、ユーザが求めるドキュメントをすばやく見つけ出すために開発されたもので、オンラインサービスtexdoc.orgに組み込まれるなど世界中のTeXユーザに利用されています。TexdocはTeX Liveの根幹をなすいくつかの技術的基盤―すなわちKpathseaライブラリ、TDS、TLPデータベース―を巧みに利用することで、ユーザの求めるドキュメントへの軽快なアクセスを実現しています。また、発表者は2017年から現在までTexdocの主要メンテナを務めており、TeX Liveに深く根ざすシステムのメンテナンスに関する知見を蓄積してきました。本講演では、こうしたTexdocのしくみやメンテナンス手法の解説をケーススタディとして、TeX Liveインフラあるいは一般のTeXエコシステムを活かしたツール開発に係る知見を共有し、新規参入者の開発意欲を刺激することを目指します。

Watson

November 30, 2024
Tweet

More Decks by Watson

Other Decks in Programming

Transcript

  1. Texdoc ͷ͘͠Έ ͸͡ΊʹɿTexdocͱ͸ TEX Live ͷจॻݕࡧπʔϧ ɹ ɹ ϩʔΧϧ TEX

    Live ͷυΩϡϝϯτΛίϚϯυͰݕࡧ ▶ τοϓώοτΛ PDF ϏϡʔΞͰදࣔ ▶ ݕࡧ݁ՌͷϦετදࣔ΋Մ ɹ ɹ Ұ෦αʔυύʔςΟ੡πʔϧͷόοΫΤϯυʹ΋ར༻ ɹ ɹ https://tug.org/texdoc/ ؔ࿈͢Δ΋ͷͨͪ ΦϯϥΠϯ൛΍ GUI ͕ଘࡏɻͨͩ͠ Texdoc ։ൃऀͷ؅׋֎ texdoc.org ΦϯϥΠϯ൛ TexdocɺIsland of TEX ੡ texdoctk Texdoc ͷ Perl/tk త GUIɺ։ൃऴྃ MiKTEX ͷ ‌ texdoc ‌ ผϓϩάϥϜ ‌ mthelp ‌ ͷΤΠϦΞε ˞ Texdoc ͸ TEX Live Πϯϑϥʹґଘ 2 / 19
  2. Texdoc ͷ͘͠Έ ຊߨԋͷ໨త ΧδϡΞϧͳτʔΫɻؾָʹฉ͍͍ͯͩ͘͞ʂ ɹ ɹ Texdoc ͷ͘͠ΈΛཧղ͠Α͏ ɹ ɹ

    ϝϯςφͷ࢓ࣄΛ஌Ζ͏ ɹ ɹ TEX ΤίγεςϜΛ׆͔ͯ͠։ൃ͠Α͏ Texdoc ΛέʔεελσΟͱͯ͠ TEX ΤίγεςϜ։ൃͷώϯτʹͳΕ͹ɹ ɹ 3 / 19
  3. Texdoc ͷ͘͠Έ ݕࡧπʔϧͷߏ੒ཁૉ Texdoc Λߏ੒͢Δॏཁͳػೳ͸ 2 ͭ υΩϡϝϯτΛݕࡧ͢Δػೳ ɹ ɹݕࡧΫΤϦʹؔ܎͢ΔυΩϡϝϯτΛݟ͚ͭΔ

    υΩϡϝϯτΛϥϯΩϯά͢Δػೳ ɹ ɹݟ͔ͭͬͨυΩϡϝϯτΛධՁ͠ɺॱং෇͚Δ ݕࡧ ϥϯΩϯά • • • ΫΤϦ ʢϢʔβೖྗʣ υΩϡϝϯτू߹ υΩϡϝϯτू߹ 1. 2. 3. υΩϡϝϯτϦετ ʢॱং෇͖ʣ 4 / 19
  4. Texdoc ͷ͘͠Έ ݕࡧᶃ TexdocͷΫΤϦ $ texdoc <query> Texdoc ͷΫΤϦ͸ओʹ 3

    ύλʔϯ ▶ ύοέʔδʢਖ਼֬ʹ͸ TEX Live ͷύοέʔδʣͷ໊લ ▶ ࣮ߦϑΝΠϧύεͷҰ෦ ▶ υΩϡϝϯτϑΝΠϧύεͷҰ෦ ˞ύεͳͷͰ਌σΟϨΫτϦͷ໊લͰ΋Α͍ ࢀߟɿྫ֎ 2 ύλʔϯ ▶ ΤΠϦΞε ▶ ύοέʔδϑΝΠϧͷϑΝΠϧ໊ʢ ‌ *.sty ‌ ʣ 5 / 19
  5. Texdoc ͷ͘͠Έ ݕࡧᶄ 2ͭͷ৘ใݯ 1. TEX Live ύοέʔδσʔλϕʔεɹ ɹʢTLPDBʣ ɹ

    ɹˠɹ ɹ ύοέʔδ໊͔ΒυΩϡϝϯτ΁ͷඥ͚ͮ ɹ ɹˠɹ ɹ ࣮ߦϑΝΠϧ͔ΒυΩϡϝϯτ΁ͷඥ͚ͮ 2. TEXMF ͷ doc πϦʔͨͪɹ ɹʢTEXDOCSʣ ɹ ɹ πϦʔͷ࠶ؼత૸ࠪͰυΩϡϝϯτͷύεΛҰཡՄ ΫΤϦλΠϓͱιʔε ΫΤϦλΠϓ ιʔε ύοέʔδ TLPDB (tlptodoc) ࣮ߦϑΝΠϧ TLPDB (runtodoc) υΩϡϝϯτϑΝΠϧ TEXDOCS 6 / 19
  6. Texdoc ͷ͘͠Έ લఏ஌ࣝɿTDSͱKpathsea TEX Directory StructureʢTDSʣ TEX γεςϜͷσΟϨΫτϦߏ੒ ʹ TEXMF

    πϦʔ ‌ tex ‌ : TEX ϑΝΠϧʢL A TEX ύοέʔδΛؚΉʣ ‌ scripts ‌ : εΫϦϓτϑΝΠϧʢTexdoc ͷ࣮૷ͳͲʣ ‌ doc ‌ : υΩϡϝϯτϑΝΠϧ ɹ ɹ TEXDOCS ‌ source ‌ : ιʔεϑΝΠϧʢ ‌ dtx ‌ ͳͲʣ Karl’s path searchʢKpathsea; ‌ kpse ‌ ʣ TDS ʹ͕ͨ͠͏ϑΝΠϧ܈͔ΒϑΝΠϧΛݕࡧ͢Δ͘͠Έ ▶ ‌ \input ‌ ͷཪͰࢦఆͨ͠ϑΝΠϧΛ୳͍ͯ͠Δ ▶ CLIʢ ‌ kpsewhich ‌ ʣ΍ Lua ϥΠϒϥϦʢ ‌ kpse ‌ ʣ΋ଘࡏ ɹ ɹ ৄ͘͠͸ TEX Live ΨΠυʢ ‌ texdoc texlive ‌ ʣ7 અΛࢀর 7 / 19
  7. Texdoc ͷ͘͠Έ ݕࡧᶅ TLPDBͷར༻ TEX Live ύοέʔδσʔλϕʔεʢTLPDBʣͱ͸ ɹ ɹ CTAN

    Χλϩά༝དྷͷϝλσʔλ΍ϑΝΠϧҰཡͳͲ name ύοέʔδ໊ shortdesc ύοέʔδͷ୹͍આ໌ docfiles υΩϡϝϯτϑΝΠϧͷύεϦετ runfiles ࣮ߦϑΝΠϧͷύεϦετ ɹ ɹ ‌ TEXMFROOT/tlpkg/texlive.tlpdb ‌ ʢݱࡏ ໿ 18MBʣ ߴ଎Խͷ޻෉ TLPDB ͸ڊେͳͷͰɺΩϟογϡΛར༻ ▶ ඞཁͳσʔλͷΈൈ͖ग़͠ɺLua ͷ ‌ dofile ‌ Խ ▶ ॳճݕࡧ࣮ߦ࣌ʹ࡞੒ ɹ ɹ DB ͷߋ৽Λݕ஌ͯ͠ߋ৽ 8 / 19
  8. Texdoc ͷ͘͠Έ ݕࡧᶆ TEXDOCSͷ૸ࠪ Kpathsea API Ͱ͸ͳ͘ɺTexdoc ಠࣗʹ֤πϦʔΛ૸ࠪ Ϛονͷ৚݅ ΫΤϦ͕ύεͷ෦෼จࣈྻʹϚον͢Ε͹

    OK ɹ ɹϑΝΠϧ໊͚ͩͰͳ͘ɺ਌σΟϨΫτϦ໊ʹ΋Ϛον ྫ ‌ hyperref/manual.pdf ‌ ʢݱࡏ͸ ‌ hyperref-doc.pdf ‌ ʣ ߴ଎Խͷ޻෉ Kpathsea ͷ͘͠ΈΛྲྀ༻ ɹ ɹ ՄೳͳΒ ‌ ls-R ‌ Λར༻ ▶ ‌ TEXDOCS ‌ ͷ ‌ ! ‌ ࢦఆࢠʹ͕ͨ͠͏ ▶ ‌ ls-R ‌ ࢖༻πϦʔͷߋ৽൓өʹ͸ ‌ mktexlsr ‌ ͕ඞཁ 9 / 19
  9. Texdoc ͷ͘͠Έ ݕࡧᶇ ͍͋·͍ݕࡧ ͍͋·͍ݕࡧͱ͸ ▶ ଟগͷλΠϙʢޡࣈ΍୤ࣈʣΛڐ༰ͨ͠ݕࡧ ྫ scsnowmen ɹ

    ɹ scsnowman ▶ ฤूڑ཭Λ༻͍࣮ͯ૷͞ΕΔ͜ͱ͕ଟ͍ Texdoc ͷ͍͋·͍ݕࡧ v3 Ҏ߱ɺύοέʔδ໊ͷΈର৅ͱ͢Δ؆қ࣮૷Λಋೖ 1. ௨ৗͷݕࡧΛ࣮ߦ 2. ώοτͳ͠ͷ৔߹ɺ͍ۙύοέʔδ໊Λ୳͢ 3. ݟ͔ͭͬͨύοέʔδ໊Ͱ࠶ݕࡧ ɹ ɹ ΤΠϦΞε΍υΩϡϝϯτϑΝΠϧ໊΁ͷରԠΛݕ౼த 10 / 19
  10. Texdoc ͷ͘͠Έ ݕࡧπʔϧͷߏ੒ཁૉʢ࠶ܝʣ Texdoc Λߏ੒͢Δॏཁͳػೳ͸ 2 ͭ υΩϡϝϯτΛݕࡧ͢Δػೳ ɹ ɹݕࡧΫΤϦʹؔ܎͢ΔυΩϡϝϯτΛݟ͚ͭΔ

    υΩϡϝϯτΛϥϯΩϯά͢Δػೳ ɹ ɹݟ͔ͭͬͨυΩϡϝϯτΛධՁ͠ɺॱং෇͚Δ ݕࡧ ϥϯΩϯά • • • ΫΤϦ ʢϢʔβೖྗʣ υΩϡϝϯτू߹ υΩϡϝϯτू߹ 1. 2. 3. υΩϡϝϯτϦετ ʢॱং෇͖ʣ 11 / 19
  11. Texdoc ͷ͘͠Έ ϥϯΩϯάᶃ είΞͱॱং είΞϦϯά ໨త ༏ઌతʹදࣔ͢ΔυΩϡϝϯτΛܾΊΔ ํ๏ ϑΝΠϧ໊ͷύλʔϯ΍ϝλσʔλΛධՁ ج४

    جຊతʹ good ͷΈΛදࣔɻ𝑠 ͸είΞ ɹ ɹ good: 𝑠 > 0 ɹ ɹ bad: −100 < 𝑠 ≤ 0 ˞ ‌ -showall ‌ ϞʔυͰ͸දࣔ ɹ ɹ killed: 𝑠 ≤ −100 ॱং෇͚ͷϧʔϧ είΞ͕࠷༏ઌɻಉ఺ͷ৔߹ʹଞͷཁૉΛར༻ 1. είΞɿܭࢉํ๏͸࣍εϥΠυҎ߱Ͱઆ໌ 2. ϑΝΠϧͷछྨɿPDF > HTML > TXT > ͦͷଞ 3. ϑΝΠϧ໊ͷΞϧϑΝϕοτॱ 4. ϑΝΠϧॴࡏ TEXMF πϦʔͷ༏ઌॱ 12 / 19
  12. Texdoc ͷ͘͠Έ ϥϯΩϯάᶄ ώϡʔϦεςΟοΫείΞ ΫΤϦͱυΩϡϝϯτͷϑΝΠϧ໊Λൺֱͯ͠ࢉग़ 1. ΦϦδφϧͷΫΤϦͱͷҰக ▶ ϑΝΠϧ໊͕ΫΤϦ͓Αͼϩέʔϧ͕׬શҰக ɹ

    ɹ 5 ఺ ▶ ϑΝΠϧ໊͕ΫΤϦͱ׬શҰக ɹ ɹ 4 ఺ ▶ ϑΝΠϧ໊͕ΫΤϦΛؚΉ ɹ ɹ 1 ఺ 2. ೿ੜΫΤϦͱͷҰக ΫΤϦʹ ‌ -doc ‌ ͳͲͷසग़ͳ઀ඌࣙΛ෇Ճͯ֬͠ೝ ▶ ϑΝΠϧ໊͕೿ੜΫΤϦͱ׬શҰக ɹ ɹ 3 ఺ ▶ ϑΝΠϧ໊͕೿ੜΫΤϦΛؚΉ ɹ ɹ 2 ఺ 3. ্هʹ͋ͯ͸·Βͳ͍৔߹ ▶ Ұ཯ ɹ ɹ −10 ఺ 13 / 19
  13. Texdoc ͷ͘͠Έ ϥϯΩϯάᶅ είΞௐ੔ ώϡʔϦεςΟοΫείΞͷܭࢉޙʹείΞௐ੔ 1. TLPDB ༝དྷͷυΩϡϝϯτ΁ͷٹࡁ ώϡʔϦεςΟοΫείΞ͕ −10

    ҎԼͷͱ͖ ▶ tlptodoc ༝དྷͷ৔߹ ɹ ɹ −1 ఺ ▶ runtodoc ༝དྷͷ৔߹ ɹ ɹ −5 ఺ 2. ϝλσʔλ΍ϩέʔϧʹΑΔϘʔφε ▶ CTAN Χλϩάʹৄࡉ͋Γ ɹ ɹ +1.5 ఺ ▶ ϩέʔϧͱ ‌ lang ‌ ઃఆ͕Ұக ɹ ɹ +1.0 ఺ 3. adjscore ʹΑΔखಈௐ੔ ઃఆͰՃ఺΍ݮ఺͕Մ ˞ݱࡏɺσϑΥϧτͰ 61 ͷࢦఆ 14 / 19
  14. Texdoc ͷ͘͠Έ ϝϯςφͷ͠͝ͱ 1. ໢ཏςετͷ։ൃɹ ɹ Ҿܧ࣌ɺ໢ཏςετ͸ଘࡏͤͣɹ ɹ ɹ ɹ

    ଍ֻ͚ 6 ೥͔͚ͯ։ൃɹ ɹ ˞ 130 ߲໨Ҏ্ 2. είΞௐ੔ͱΤΠϦΞεͷϝϯςφϯεɹ ɹ ೔ࠒ͔Β࢖ͬͯνΣοΫˍใࠂϕʔε ɹ ɹ ඪ४ઃఆʢ ‌ texdoc-dist.cnf ‌ ʣʹ൓ө 3. ϓϧϦΫͷड͚ೖΕɹ ɹ ৽ػೳͷੵۃಋೖϑΣʔζͰ͸ͳ͍͕ɺఏҊ࣍ୈ ɹ ɹ ϨϏϡʔˍςετͷ࡞੒ґཔʢαϙʔτʣ 15 / 19
  15. Texdoc ͷ͘͠Έ ϝϯςᶃ ໢ཏςετͱCIઃఆ ςετ։ൃͷ՝୊ ▶ ৼΔ෣͍͕ݕࡧର৅ͷυΩϡϝϯτʹ΋ґଘ ɹ ɹ ೖྗͱίʔυ͚ͩͰܾ·Βͳ͍

    ▶ Kpathsea ͕ೝࣝͰ͖ΔΠϯετʔϧ͕ඞཁ CI ઃఆ ▶ GitHub Actions Ͱ Linux/macOS/Windows ▶ ςετର৅ Texdoc ͱ scheme-small ΛΠϯετʔϧ ςετͷجຊઃܭ ▶ RubyʢRSpec + ArubaʣʹΑΔ݁߹ςετ͕த৺ ʢएׯ͕ͩɺ಺෦ؔ਺͸ Lua ͷ Unit ςετ΋͋Γʣ ▶ ϞοΫ TEXMF + TLPDB ͱຊ෺ͷ TEX Live Λ࢖͍෼͚ 16 / 19
  16. Texdoc ͷ͘͠Έ ϝϯςᶄ είΞͱΤΠϦΞε TEX Live ͷύοέʔδ͸૿ݮɺͨ·ʹߏ଄΋มߋ ɹ ɹ ඪ४ઃఆͷ

    ‌ alias ‌ ΍ ‌ adjscore ‌ ͸ϝϯςφϯε͕ඞཁ ೔ࠒͷΞΫγϣϯ ͱʹ͔͘ Texdoc Λ࢖͏ʂ มͳڍಈΛݟͨΒ௚͢ɹ ɹ ▶ ‌ tlmgr update ‌ Ͱ auto-install ΛݟͨΒଈ ‌ texdoc ‌ ϝʔϦεʢ ‌ [email protected] ‌ ʣ΍ GitHub ͷใࠂʹରԠ ϦϦʔεલͷΞΫγϣϯ ‌ rake check_aliases ‌ ͰશΤΠϦΞεͷੜଘΛ֬ೝ ‌ rake save_output ‌ Ͱ؂ࢹΫΤϦͷείΞΛ֬ೝ 17 / 19
  17. Texdoc ͷ͘͠Έ ϝϯςᶅ ࠷ۙͷϓϧϦΫ ड͚ೖΕͷํ਑ ▶ Texdoc ։ൃऀ͕ܧଓతʹϝϯςφϯεͰ͖Δ͜ͱ ▶ ςετ͕༻ҙͰ͖Δ͜ͱ

    ˞࡞੒ͷαϙʔτ͸Մ ۙ೥ͷओͳϓϧϦΫ #79 ΦϯϥΠϯݕࡧػೳʢMax Chernoff ͞Μʣ ϩʔΧϧʹυΩϡϝϯτ͕ෆࡏͳΒ texdoc.org ʹඈͿ #91 λϒิ׬ؔ਺ͷϓϦϯτʢWu Zhenyu ͞Μʣ ‌ --print-completion=zsh ‌ ΞΫγϣϯͷ௥Ճ ɹ ɹมߋͷҰཡ͸෇ଐͷ ‌ NEWS ‌ Λࢀর 18 / 19
  18. Texdoc ͷ͘͠Έ ࠓޙͷܭըͱ·ͱΊ ͜Ε͔Βͷ Texdoc ▶ ͍͋·͍ݕࡧͷ֦ு ▶ ΤΠϦΞε΍ϑΝΠϧ໊Λର৅ʹ௥Ճ ▶

    ώοτ 0 ݅Ҏ֎ͷ৔߹ʹ΋࣮ߦ ▶ ิ׬ؔ਺ͷαϙʔτγΣϧ௥Ճ ▶ L A TEX ιʔεΛར༻ͨ͠શจݕࡧͷࢼݧ࣮૷ʂʁ ɹ ɹ ໢ཏςετ͕׬੒ͨ͠ͷͰɺ৽ػೳ௥Ճͷػӡ ·ͱΊ ▶ Texdoc ͸ TEX Live Πϯϑϥͷ͘͠Έʹཱ٭ ▶ ϝϯςϯφε͸ී௨ͷ OSS ͱಉ༷ɻςετ͸େࣄʂ ▶ TEX ΤίγεςϜΛ׆͔ͨ͠։ൃΛͯ͠ΈΑ͏ʂ 19 / 19