Share
Embed
パッケージ制作のすゝめ / latex-package
Watson
November 05, 2016
Transcript
27 slides
-
ύοέʔδ੍࡞ͷ͢ʍΊ ࣗݾհ ே ਓ ▶ ౦ژେֶཧֶ෦ੜใՊֶՊ 3 ▶ ϋϯυϧωʔϜϫτιϯʢwtsnjpʣ
▶ ߴߍ࣌ࢠੜֶΛѪ͍ͯͨ͠ ˠ͍·ֶใՊֶʹڵຯ͕Ҡߦ ▶ झຯొࢁʢΫϥΠϛϯάొΓؚΉʣ ˠࠓઇࢁߦ͖͍ͨɽ໋͕͍ͭ͋ͬͯ͘Γͳ͍ ▶ ͪΖΜϓϩάϥϛϯά͖ େ͖ͳݴޠɿTEX (on L A TEX), Ruby ͬͨ͜ͱ͋ΔݴޠɿC/C++, R, Python, Scheme, etc. ▶ 2015 ʹ౦େ TEX ѪձΛઃཱ 2 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ L A TEX ύοέʔδͱ ఆٛ L A TEX ͓ΑͼจॻΫϥεΛิ͍ɼ༷ʑͳػೳ֦ுΛߦ͏ϓϩάϥϜ
ʢ͓Αͼଐ͢ΔϑΥϯτͷσʔλʣΛ L A TEX ύοέʔδͱݺͿɽ ˠ௨ৗϓϦΞϯϒϧʹͯ \usepackege ʹΑΓಡΈࠐ·ΕΔͷ ྫ ▶ ύοέʔδͰ͋Δͷɿgraphicx, X Υ MTEX, TikZ, etc. ▶ ύοέʔδͰͳ͍ͷɿjsarticle, ConTEXt, METAFONT, etc. ύοέʔδϑΝΠϧ چελΠϧϑΝΠϧʢL ATEX 2.09ʣ ∗.cls, ∗.clo, ∗.sty , ∗.def, ∗.dtx, ∗.ins ύοέʔδʹؚ·ΕಘΔϑΝΠϧ 3 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ։ൃதͷύοέʔδͨͪ ▶ WT SeriesɿL A TEX จॻ࡞༻ͷύοέʔδू ▶ WTStyle
- จॻϨΠΞτΛ؆୯ʹઃఆ ▶ WTRef - ૬ޓࢀরػೳͷ֦ுʢ໊લۭؒɾείʔϓʣ ▶ WTKeyword - ࡧҾ࡞ͷิॿ ▶ WTMath - ࣜ༻ϚΫϩ ▶ WTCounter - Χϯλͷग़ྗΛ֦ு ▶ TL SeriesɿTEX on L A TEX ϓϩάϥϛϯά༻ͷύοέʔδू ▶ TLArray - ྻϥΠϒϥϦ ▶ TLRegexp - ਖ਼نදݱϥΠϒϥϦ ▶ TLDebug - σόοά༻ ▶ ClassicalCipherɿݹయΞϧΰϦζϜʹΑΔ҉߸Խɾ෮߸Խ ▶ GotohɿSmith-Waterman-Gotoh ΞϧΰϦζϜ ੨ࣈɿCTAN Ͱར༻Մ ࣈɿܭըஈ֊ʢະ࣮ʣ 5 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ύοέʔδ੍࡞ͷϝϦοτ ϚΫϩ࡞ͷҙٛ ▶ ίʔυهड़ྔͷܰݮ ▶ จॻߏԽͷపఈ ▶ ηϚϯςΟΫεͷ໌ྎԽ ▶
อकੑͷ্ ▶ දهΏΕͷൃੜΛࢭ ྫ ྦྷͱٯߦྻɿx−1, A−1 ▶ ී௨ʹॻ͘ͱ x^{-1}, A^{-1} ▶ ߏԽ͢Δͱ x^{-1}, \inverse{A} ύοέʔδԽͷҙٛ ▶ DRY ݪଇΛकΔ͜ͱʹΑΔอकੑͷ্ ▶ υΩϡϝϯτ࡞ʹΑΓ༷ͷચ࿅Խ͕ଅਐ ▶ Ռͷڞ༗ɾίϛϡχςΟͷߩݙʹͭͳ͕Δ 6 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ύοέʔδͷએݴ ▶ \ProvidesPackageɿύοέʔδͷجຊࣄ߲Λએݴ ▶ \ProvidesPackage{⟨name⟩}[⟨date⟩ ⟨info⟩] ͱ͍͏ॻࣜ ▶ ⟨name⟩
ύοέʔδͷ໊শʹύοέʔδϑΝΠϧ໊ ▶ ⟨date⟩ ඞͣ YYYY/MM/DD ͷॻࣜͰॻ͘ ex. 2016/11/05 ▶ ⟨info⟩ ʹͦͷଞͷใ ▶ ϩάϑΝΠϧʹॻ͖ࠐ·ΕΔͷͰա͗Δͷμϝ ▶ όʔδϣϯ൪߸ͱ͍આ໌͕ॻ͔ΕΔ͜ͱ͕ଟ͍ ▶ \NeedsTeXFormatɿඞཁͳ TEX ڥΛએݴ ▶ \NeedsTeXFormat{⟨format⟩}[⟨date⟩] ͱ͍͏ॻࣜ ▶ ⟨format⟩ جຊతʹ LaTeX2e ͔ pLaTeX2eʢจઐ༻ͷ߹ʣ ▶ ⟨date⟩ ͷॻࣜ \ProvidesPackage ͱಉ͡ ▶ ಛఆͷϦϦʔεҎ߱ͷ ⟨format⟩ Λࢦఆ͍ͨ͠߹ʹॻ͘ ▶ ಛʹͳ͚Εলུͯ͠Α͍ طଘͷʢஶ໊ʣύοέʔδʹ฿͏ͷ͕Φεεϝ 9 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ී௨ͷϚΫϩ࡞ͱͷҧ͍ ύοέʔδΫϥε࡞ऀ༻ L A TEX ໋ྩ Φϓγϣϯؔ࿈ϝοηʔδग़ྗؔ࿈Ͱ͍͔ͭ͋͘Δɽ͍ํ ඞཁʹԠͯ͡ௐΕेɽ ྫ
▶ \RequirePackageɿґଘύοέʔδͷಡΈࠐΈ ▶ \DeclareOptionɿύοέʔδΦϓγϣϯͷએݴ ▶ \ProcessOptionsɿϢʔβࢦఆΦϓγϣϯͷॲཧΛ࣮ߦ ͦͷଞͷҙࣄ߲ ▶ ଞͷύοέʔδͱͷׯবΛۃྗආ͚Δ ▶ ෭࡞༻ΛͳΔ͘Ҿ͖ى͜͞ͳ͍ ͍ͭҎ্ͷʮؾΓʯ͕େ 10 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ؾΓᶃ ໊લۭؒ ໋ྩͷछྨ ▶ Ϣʔβ໋ྩɿϢʔβʹ༻ͯ͠Β͏ͨΊͷ໋ྩ ▶ ෦໋ྩɿ্࣮ඞཁͳύοέʔδͰར༻͢Δ໋ྩ ಈػ 1.
Ϣʔβʹ෦໋ྩʹΞΫηεͯ͠ཉ͘͠ͳ͍ 2. ଞͷύοέʔδͷ໋ྩͱͷিಥΛࢭ͍ͨ͠ ํ๏ 1. ໋ྩʹ@ΛؚΊΔʢύοέʔδͰσϑΥϧτͰར༻Մʣ 2. ෦໋ྩʹඞͣύοέʔδݻ༗ͷ಄ࣙΛ͚Δ ex. sample ύοέʔδͷ෦໋ྩΛ \smpl@hoge ʹ౷Ұ 12 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ؾΓᶄ ໋ྩఆٛ ͓͢ʍΊํ Ϣʔβ໋ྩ L A TEX ࣜɼ෦໋ྩ TEX
ࣜͰఆٛ͢Δɽ ▶ L A TEX ࣜɿ\newcommand, \providecommand, etc. ▶ ఆٛ͠Α͏ͱ͢Δ໋ྩ͕ఆٛࡁΈͰ҆શͳڍಈ ▶ TEX ࣜͷఆٛʹൺΔͱࣗ༝͕͍ ˠ L A TEX ࣜͰఆٛෆೳͳϢʔβ໋ྩ༷ͷݟ͠Λݕ౼ ▶ TEX ࣜɿ\def, \edef, \xdef, \let, etc. ▶ ఆٛ͠Α͏ͱ͢Δ໋ྩ͕طଘͰແܯࠂͰ্ॻ͖͢Δ ˠিಥ͠ͳ͍Α͏໊લۭ͕ؒ͞Ε͍ͯΔ͜ͱ͕લఏ ໋ྩͷ robust ੑ \section \caption ͳͲͷҾͰ༻͞ΕಘΔϢʔβ໋ྩ robust ʹఆٛ͢Δඞཁ͕͋Δɽ ˠݪଇ \DeclareRobustCommand ໋ྩΛ༻͍ͯఆٛ͢Δ 13 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ؾΓᶅ ྫ֎ॲཧ ͓͢ʍΊํ ▶ ༧ଌͰ͖Δෆਖ਼ͳೖྗΛ์ஔ͠ͳ͍ ˠ͖ͪΜͱݕ͠ɼదͳϝοηʔδΛදࣔ͢Δ ▶ ϩάϨϕϧʹ͍ͭͯΑ͘ߟ͑Δඞཁ͕͋Δ ▶
ܯࠂɿજࡏతͳ͋Δ͕ॲཧଓߦՄ ▶ Τϥʔɿக໋తͳͰॲཧͷଓߦෆՄೳ ϩάؔ࿈ͷ L A TEX ໋ྩ ͯ͢ͷ໋ྩ͕ୈ 1 Ҿʹύοέʔδ໊ ⟨pkg⟩ ΛͱΔɽ ▶ \PackageError{⟨pkg⟩}{⟨error text⟩}{⟨help text⟩} ▶ \PackageWarning{⟨pkg⟩}{⟨warning text⟩} ▶ \PackageWarningNoLine{⟨pkg⟩}{⟨warning text⟩} ▶ \PackageInfo{⟨pkg⟩}{⟨info text⟩} 14 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ؾΓᶆ Ϩδελͷར༻ن ▶ TEX ʹ \count, \dimen ͳͲͷϨδελʢมʣ͕͋Δ ▶
༻ՄೳͳϨδελͷʹ্ݶ͕͋Δ ▶ ݩʑͷ TEX ॲཧܥͰ֤छ 256 ݸͣͭ ▶ ࠷ۙͷॲཧܥʹ͍ͬͺ͍ʢ֓Ͷ 215, 216 ݸఔʣ ▶ چདྷͷΑ͏ʹؤுͬͯઅ͠ͳ͍͍ͯ͘ ▶ ༻్ຖʹඞཁͳ͚ͩϨδελΛऔಘ ▶ ແ༻ͳϨδελͷ͍ճ͠όάͷԹচʹͳΓ͕ͪ ▶ ໋ྩΛ༻͢ΔʹϨδελΛফඅ͢Δઃܭආ͚Δ ˠ\newcount ͷྨݪଇύοέʔδͷͷจʹ͚ͩॻ͘ μϝͳྫ 1 \def\x@double#1{% 2 \newcount\x@cnt 3 \x@cnt=#1\relax 4 \multiply\x@cnt\tw@ 5 \the\x@cnt} ྑ͍ྫ 1 \newcount\x@cnt 2 \def\x@double#1{% 3 \x@cnt=#1\relax 4 \multiply\x@cnt\tw@ 5 \the\x@cnt} 15 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ؾΓᶇ ͦͷଞ ݪঢ়෮ؼ ▶ φχΧΛมߋͨ͠ΒɼॲཧΛऴ͑ͨΒݩʹ͢ ▶ ͳΔ͘ \bgroup, \egroup
ʹΑΔάϧʔϐϯάΛ׆༻ ˠඞͣ͜ͷํ๏͕͑ΔͱݶΒͳ͍ʢείʔϓͷʣ ▶ ࣗͰݪঢ়෮ؼ͢Δ߹ʹಛʹҙ͕ඞཁ ྫ 1 \x@cnt=\catcode ‘\| \catcode ‘\|=11 2 % wonderful definition!! 3 \catcode ‘\|=\x@cnt ϚΫϩ࡞ʹؔΘΔҰൠతͳҙ ▶ ߦͷॲཧ͕͘ɼ༨ܭͳۭന͕ೖ͍ͬͯͳ͍͔ʁ ▶ ޡͬͯ TEX ͷΩʔϫʔυͱͯ͠ղऍ͞ΕΔڪΕͳ͍͔ʁ 16 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ڥґଘ Ұൠతͳ͜ͱ ▶ ґଘύοέʔδՄೳͳݶΓগͳ͍ํ͕ྑ͍ ˠ؆୯ʹ࣮Ͱ͖Δ໋ྩΛݸ͍͍ͨఔͳΒࣗલͰ༻ҙ ▶ ༷ॻʹ໌ه͞Ε͍ͯͳ͍ڍಈʢ෭࡞༻ʣʹґଘ͠ͳ͍ TEX ಛ༗ͷҙࣄ߲
▶ L A TEX ͷ໋ྩʹґଘ͢Δͷ࣮ةݥ ▶ latex.ltx ݁ߏେʹมߋ͞ΕΔ͜ͱ͕͋Δ ▶ ಛʹ෦໋ྩʢ@ΛؚΉ໋ྩʣ༻࣌ཁҙ ▶ Ϋϥεʹݪଇґଘ͠ͳ͍ʢύοέʔδͷཁ݅ʣ ▶ ॲཧܥʹΑͬͯ͑ΔϓϦϛςΟϒ͕ҧ͏͜ͱʹཹҙ ˠಛఆͷॲཧܥʹґଘ͍͍͕ͯ͠ɼ༷ʹ໌ه 17 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ΠϯλʔϑΣʔεͷઃܭᶃ εΫϦϓτݴޠతಛੑ ▶ TEX ߴϨΠϠͷଘࡏ ˠ L A TEX
ͬͱ ▶ ΠϯλϓϦλܕݴޠ ▶ ੩తܕ͚Ͱͳ͍ ▶ ࣮ߦ͍ ػցޠ ΞηϯϒϦ C ݴޠ TEX L ATEX ઃܭͷํʢݸਓతͳݟղʣ ▶ ؆ܿʹهड़Ͱ͖ΔͱΑ͍ ▶ ݫ֨ੑΑΓॊೈੑ ex. ͑ΕΘ͔ΔࣈΛϢʔβʹهೖͤ͞ͳ͍ 19 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ΠϯλʔϑΣʔεͷઃܭᶄ L A TEX Β͠͞ ▶ ݪ࢝తʹ \newcommand ͕αϙʔτ͢Δܗଶ
▶ ඞਢҾͯ͢{}Ͱғ͏ॻࣜ ▶ ࠷ॳͷҾ͕ [] Ͱғ͏ॻࣜͳΒΦϓγϣϯҾ ▶ L A TEX Β͠͞Λҡ֦࣋ͨ͠ுܗଶ ▶ ੍ޚ௲ͷޙʹ ∗ ͕͘ͱڍಈ͕গ͠มԽ ▶ ҙͷҐஔʹ [] Ͱғ͏ॻࣜͷΦϓγϣϯҾ ͳΔ͘ආ͚͍ͨ ▶ L A TEX Β͘͠ͳ͍ΠϯλʔϑΣʔεʢඇײతʣ ▶ {}Ͱғ͏Ҿ͕Մม ▶ Ҿͷࣝผʹ{}Ͱ [] Ͱͳ͍ه߸ͷ༻ ▶ Ҿͷ͕ଟա͗Δʢ֮͑ʹ͘͘ɼՄಡੑ͍ʣ 20 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ key-value Ϧετͷ׆༻ key-value Ϧετ ▶ graphicx TikZ Ͱଟ༻͞Ε͍ͯΔ
▶ “⟨Ωʔ⟩=⟨⟩” ͷΧϯϚ۠ΓϦετ ▶ L A TEX ඞਢύοέʔδ keyval ͦͷ֦ு xkeyval Ͱ࣮Մೳ ▶ Ϧετͷઌ಄ɾඌɼΧϯϚͱ߸पลͷεϖʔεແࢹ ϝϦοτ ▶ Ҿͷॱ൪͕ࣗ༝͔ͭҙຯ͕໌ࣔతͰॻࣜΛ͍֮͑͢ ▶ άϩʔόϧͳઃఆɾϩʔΧϧͳઃఆΛ࣮͍͢͠ ˠϢʔβಉ͡ઃఆΛ͍͍ͪͪೖྗ͠ͳͯ͘Α͍ ▶ ΧϯϚ۠ΓϦετ͔ΒۭനΛ؆୯ʹআڈ͢Δͷʹ͑Δ ˠϧʔϓॲཧதɼຖճ “key=\member” ͷΑ͏ʹ௨͢ 21 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ υΩϡϝϯτͷ༻ҙ ඞཁੑͱ༗༻ੑ ▶ গͳ͘ͱਓʹͬͯΒ͏ʹυΩϡϝϯτඞਢ ▶ ༷Λ໌จԽ͢Δ࡞ۀ։ൃऀʹͱͬͯ༗ӹ ˠઃܭͷ៛ີԽચ࿅ʹͭͳ͕Δ υΩϡϝϯτͷܗଶ ▶
جຊ L A TEX จॻͱͯ͠࡞ ▶ ՄೳͰ͋Εຊޠͱӳޠͷ 2 ϲࠃޠͰ࡞ ˠจઐ༻ύοέʔδͳΒຊޠɼͦΕҎ֎ͳΒӳޠ͕༏ઌ ▶ READMEʢ௨ৗ text ͔ markdownʣͷΈͰͳ͍ΑΓϚγ ▶ ϒϩά Qiita ͰهࣄΛ࡞͢ΔͱએޮՌൈ܈ ▶ doc/DocStrip ʹΑΔจॻ࡞ʢdtx, insʣͦΕͳΓʹࡶ 22 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ GitHub Ͱͷ։ൃ GitHub ▶ ιϑτΣΞͷιʔεཧαʔϏε ݉ ։ൃऀ͚ SNS ▶
όʔδϣϯཧγεςϜ git Λ༻ ▶ OSS ։ൃʹແྉͰར༻Մೳ ▶ TEX ͷγϯλοΫεϋΠϥΠτʹͪΌΜͱରԠ͍ͯ͠Δ 23 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ςετࣗಈԽ Travis CI ▶ GitHub ͱ࿈ܞ͢ΔܧଓతΠϯςάϨʔγϣϯαʔϏε ˠ GitHub ͷ
push ૢ࡞ΛτϦΨʹࣗಈͰςετ࣮ߦ ▶ GitHub ͱಉ༷ʹ OSS ։ൃʹແྉͰར༻Մೳ ▶ TEX ڥඪ४උ͞Ε͍ͯͳ͍͕ɼࣗ༝͕ۃΊͯߴ͍ ˠࣗྗͰ TEX Live ΛಋೖՄೳ ▶ ༷ʑͳڥʢOS, TEX ॲཧܥʣͰͷςετ࣮ߦ͕༰қ ྫ ࣍ͷ 3 ॲཧܥͰςετʹޭʢOS ڥ Ubuntu 12.04ʣ ▶ pdfTEX ▶ LuaTEX ▶ X E TEX 24 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ CTAN ͷΞοϓϩʔυ Ξοϓϩʔυཁ݅ʢҰ෦ TEX Live ͷใΛؚΉʣ ▶ ڊେύοέʔδҎ֎֊ߏΛ࡞ΒͣʹϑΝΠϧஔ ˠ
TDS ߏͷ zip ϑΝΠϧʢTDS-structured ZIPʣෆཁ ▶ ࠷Ͱӳޠ൛ README ඞਢ ▶ ͏গ͠ຊ֨తͳυΩϡϝϯτ͋ͬͨํ͕Α͍ ˠϑΝΠϧ manual.pdf ͷΑ͏ͳҰൠత໊শͰμϝ Ξοϓϩʔυޙ ▶ ࣌ؒޙʹϝϯςφͷํ͔ΒϑΟʔυόοΫʢӳޠʣ ▶ ϛϥʔϦϯάͷྃΛͪɼ͓Αͦ 24 ࣌ؒޙʹࠂ͕ܝࡌ ▶ ཌʹ TEX Live ʹऔΓࠐ·Εͨ 25 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ύοέʔδΛ࡞Ζ͏ ▶ ಛघͳٕೳඞཁͳ͍ ˠجຊతʹΞΠσΞͱΔؾ͕͋Εेʂ ▶ ϝϦοτͦ͋͜ΕɼσϝϦοτ͋·Γͳ͍ ▶ ҙ֎ͱख͔͔ؒΒͳ͍ ▶
ඞཁͳϢʔςΟϦςΟ L A TEX ͕ඪ४Ͱ༻ҙ ▶ ීஈΑΓগ༷͠ʑʹؾΛͬͯίʔσΟϯά ▶ Ͱ͖ΔൣғͰυΩϡϝϯτΛॻ͘ ▶ ͍͍͢ΠϯλʔϑΣʔεΛߟ͑Α͏ ▶ ۙ։ൃΛࢧԉ͢ΔศརͳαʔϏε͕ͨ͘͞Μ͋Δ ▶ ༨ྗ͕͋Ε CTAN ʹΞοϓϩʔυ ˠ͜͜·ͰΔͱɼͦΕͳΓʹୡײಘΒΕΔ ύοέʔδ੍࡞Ͱɼշదͳ L A TEX ϥΠϑΛʂ 26 / 27 -
ύοέʔδ੍࡞ͷ͢ʍΊ ࢀߟจݙ [1] ԞଜɿL A TEX2ε ඒจॻ࡞ೖɼٕज़ධࣾɼ1997 [2] ౻ాᚸ࡞ɿL
A TEX2ε ϚΫϩ࡞๏ɼϐΞιϯɼ2010 [3] ϖʔδɾΤϯλʔϓϥΠθζ᷂ɿL A TEX2εʲϚΫϩˍΫϥεʳ ϓϩάϥϛϯάجૅղઆɼٕज़ධࣾɼ2002 [4] ٢Ӭపඒɿಠश L A TEX2εɼᠳӭࣾɼ2008 [5] The L A TEX3 Project: L A T EX2ε for class and package writers, http: //mirror.ctan.org/macros/latex/doc/clsguide.pdf [6] Z.R.: ϚΫϩπΠʔλʔɼ http://d.hatena.ne.jp/zrbabbler/ Happy L ATEXing!! 27 / 27