マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

“TypstでTeXのロゴ”とか暮れのごあいさつとか

Typstで“TeXロゴ”したい話

以前に“TeXのロゴ”について記事を書きました。

この記事では、“TeXロゴ”の熱狂的なファンがTeX以外で正しい“TeXロゴ”を出力する方法について解説しています。具体的にはHTML+CSSおよびMicrosoft Wordを扱っています。

Wordで“TeXロゴ”する様子

今世間で話題になっている“TeX以外”といえば、やっぱりTypstですね。熱狂的なファンであれば、当然Typstでも“TeXロゴ”(および“LaTeXロゴ”)を使いたいところです。

※ちなみに、SATySFiにおいては標準ライブラリのpervasiveにおいて“TeXロゴ”と“LaTeXロゴ”を出力するための\TeX命令と\LaTeX命令が提供されています。

Typstで“TeXロゴ”してみた話

というわけで、つくってみました。

[texloog0.typ]
#let TeX = {
  [T]; "\u{2060}"
  box({h(-0.1667em); box(move(dy: 0.2153em)[E]); h(-0.125em)})
  "\u{2060}"; [X]
}
#let LaTeX = {
  [L]; "\u{2060}"
  box(style(styles => {
    let size = measure([T], styles)
    h(-0.36em)
    box(height: size.height, {text(size: 0.7em)[A]})
    h(-0.15em)
  }))
  "\u{2060}"; TeX
}

このtexloog0.typをライブラリとしてインポートします1

#import "texloog0.typ": *

これにより次の2つの値2が使えるようになります。

  • TeXTeXのロゴ(content値)。
  • LaTeXLaTeXのロゴ(content値)。

もちろんTypstのマークアップモードの中で使う場合には#TeX;のように書くことになります。以下で簡単なサンプルを示します。

#import "texlogo0.typ": *
#set text(font: "Harano Aji Mincho")

#TeX;言語は超絶アレ、#LaTeX;は微アレ。

☃は非アレ。

この文書をコンパイルすると以下の出力が得られます。

出力結果

無事にTypstで”TeXロゴ”できました(幸せ😊)

まとめ

今年も一年、ありがとうございました!

除夜のカントカ

ZR「というわけで、来年も当(くだらない)ブログをよろしくお願いします!」
*「アレレ、ネタ画像が完全に2年前の使い回しだ😲」
ZR「………………3


  1. 最後の*は「全てインポート」を表すもので、例えばこれをTeXに変えると#TeXだけがインポートされます。
  2. TeXLaTeXはcontentを返す関数ではなくcontent値そのものです。
  3. チョット変えたとしても誰の得にもならないので、ここは省力化することにしましょう🙃

今年も Merry TeXmas! ― \end{texadvent2023}


TeX & LaTeX Advent Calendar 2023
*  *  *

アドベントカレンダー完走!

+88508828882888288828882888288828882888288828882888288828882888288828888
-45886688758823188232882338850972086667109289025595801777770600081308710
+88231885059520663304283186539094925899696529553504406871601717178172108
-88794488238823188488238823288238823388298850699868069817901780806811808
+88758869882332887588698823228875588232885083874655954871007111180142100
+88231882338850387852755197760761265569092407858099695817891780861306510
+88232882388233882988748874882328823188232885068590854680807171110898698
+88758823882328874887558823882318850056682580903680690808986606868689868
+88233887488748823188758823882318835882388232883588507197966717689911139
+88231882388231885806866655961407706803991452429998718710718008776170680
+88238823288748875887488748875885036216936908506049916910516911110677760
-45886688507995449009980283852235697816134029592056910910618138118080118
-88645588583869533786667323616862863994861397828068610516618677418171140
-88655588758858978756751528203674989265465548532805809680868090980809685
-44488358850382095266226251250299725958992734568027740216472098128641996
-88638838865886188645887588678825886388298861887588388638804588505479064
-58865488638838865886188645883588509010769993536660568067636258528757193
-54488358850836205039656569602312185876868553300059581823731728766932539
-54588668835885877850956868012641295168766932621968345207838095713951595
-88694488358858286658562233606437326320801660830862732993102980174802493
-48869886458865458866883588584899912828169194686958332823753520924556787
-88644488358850102976993458593552658313380965991657669555580932839156143
-88645886188658869886588678835885808933583809933352526813625387374994362
-88674488231882328823388298835882328835887588231883588505692809580493989
-88638838865886188645882314488585031324335329357483651358323290968691483
-58865488638838865886188645883588298875889885856012465773851629847463189
-88734488488678824887588648834882988754882226883418850555256096407586804
+88748875412388349887543388754928875588210882688214886188988748821032885
+98821488698868869458821078875488210887543388754338875432887548822368834
+68875504619629882604588666188266288748874040887244618821626388299629885
+88758890887244884882887588648861882904076179088638838865886188645618858
-58865488638838865886188645904096162908861488688618865886350062078875885
+88288638863880457882232000788758828808877588288638861887357882604619885
+29887490039090290901209012090610903300970908879447090887144309088774406
-40890458866988758869088692040887561790788758877488666179040887190440887
+88299040446188299088758875882886988758873588288618875887278826618874904
-88766149088218873588758838826610088288670061000882088678874909088764406
-90880443007104058877614628829907887588988628808875880788758838806108862
+88266207887588988388737887490404887161490448821881006100886388648829904
-88219088758863880887588288088288388758838861886388758871702009090886702
-40488766149088218873588758838826610088288678874909088793090887770408862
+98862887588779090887210408826619078875889883887588188698875887776108869
-58870248867882990908873104048872614628829907887588288088775887276108862
-58870240788758898838875881886988758877731088620886662882990400988219885
+88754060100120405990788668808865887588737088668834886688618868864887205
+78890088618875887310288250230603012088628875410210013080488788260504882
+32024575151515251515151525151515150150153515153501882904887231024565605
+56503501525015250188290488723020245751515351515153515151565151535015205
+50188290488722902458826102887452565882610288745015015250188290488722885
-30245651515153515151515251515151565065151501515188290488203024502515305
+52515151515250152515151515015015251515151535151535151518829048872702885
+45025252525650150156501525650152501882904887260245025252525151515015105
+51506575151535151515350152515151882904882060245025252525650150150350105
+56515151515253882904882010245025351525151515152501501503501515151515205
+50152501882988740459088269887541021001020804889882604420253158864519533
+10150115135012588635125013510250135750101588635015016565016503501658863
+95016511501015125010158863510150165101501751065019588635165506155165019
+16501035886351650165101501015106501358863516501252153065225533588635523
+31521530252025315886358862882988740804883882604418825395887751508898858
+88290886025025024048876151514044060257258864560157257656065765060658863
+76506157250175675010158863579501150301532503015206588635030151357065503
+60350358863532503588758872520650351651351652065886351653252150115335885
-10158863520350175201506152015060658863520156065365725060257258863558862
+88290886025025024044012506658864501250603501150695010250695886353950695
+30350603530350665886353035060153950635010250635886350115063501250601555
-12506658863588668829044625066588645625060356150695602506955886350695069
-60350603506035066588635060350601506950635602506358863561506356250601562
-66588635886688290440102501035886450106501065060650106560250103588635885
-88388290488688259502502404430657258864530657253065030350602503035886355
-60250303506250303506035030358863506035030357025030357350325886357355032
+73503257250315886357250315665030656150335886356150335665703560657258863
-60257253065725306572588635886288290488761515140443065675886453065675532
+60353257025886353257025325735306573588635306573506025701560655735558863
+60657356035735603570258863560357025603560356065675886350602556655306567
+30656758863588628829048876151514044765031588645765032570650335701503355
+88635735033572503257250315886357250302573579570157958863570657957650302
+76503158863588628829088688250358825015024048890488188241502502515102025
-24048890881088688259502502404427501035886450125303506035303573501035885
+88635706501657650101577501158863577539570653757353658863570153355701531
+76526588635706520657252015665235886356652756065302563530158863501255302
+32530652015011588635206501065265017527501035886355886288298874887541021
+11088690388250108862078873588758838862880887588072058870103024882608821
+88758878875886883887588988260200886700020008867887404886882502200882505
+20300024044020002000103020036020088725008866882904887105188250300020002
+18825030020602009024048830881048871058824188250300020002001882503002302
+90240488308810488761008825790088253404887110002000200882410002000240705
+88658808869886545886588758873704887088108821887588788088758878874882905
-78875889887588737200360208862040498808828869886788698865908875887588904
+70244088758860470244088758875887886188675887886948875883885008060906960
+88758879708877420887588758878861886758875887958869886788508967777877780
+88758898875887370788758898875887372078838875889886988509599080078078976
+88758878808875886887588737078862880887588072887488586808059589700077780
-58865488582888288828882888288828882888288828882888202312258887777878878
(コンパイル方法)

というわけで、12回目の開催となる TeX & LaTeX Advent Calendar 2023 も、素敵なTeXネタを途絶えさせることなく無事にクリスマスの日を迎えられました。今年の参加者は全部で13名でした。参加者の皆様に心からの感謝を捧げたいと思います。

今年の重点テーマは「(La)TeXで幸せになる方法」でした。(La)TeXで何かが実現できればそれは当然幸せ😊になれます。そういうわけで比較的取り組みやすいテーマだったようで、重点テーマ絡みのネタが過去最高の19件1となりました😃

もしかしたら「TeXで幸せになるなんてケシカラン、TeXはやっぱり不幸😭を目指すべきである」という人も現れるかとチョット思っていたのですが、やっぱりクリスマス🎄の雰囲気に似合うのは不幸😭ではなく幸せ😊なのでしょう。トッテモ幸せ😊🤯なカレンダーができあがりました。

TeX & LaTeX Advent Calendar 2023 を楽しんでくれた皆さんに、

ありがとう!

そして


  1. 記事の文章の「本題に関係ある部分」が「幸せ」を含んでいるもの。

TeXでもTypstでもコンパイル可能なファイルを作りたい話

これは「TeX & LaTeX Advent Caleandar 2023」の12日めの記事です
(11日めは h20y6m さんでした。13日めは CareleSmith9 さんです)

結局12日目が埋まらなかったので、某ZRの小ネタ話になります(ざんねん🙃)

SATySFi以外の話

2021年のアドベントカレンダーTeX/LaTeXSATySFiの両埋め)にこんなネタがありました。

今回はSATySFiでなくTypstでやってみようという話です。まあ技術🌲的に目新しいことは何もないわけですが。

Typstを紹介する話

過去の某ツイーター記事をみましょう。

もっとマジメな説明を読みたいという人はこちらをどうぞ。

というわけで、今回はTeXとTypstのpolyglotをつくります。

TeXとTypstでいかにpolyglotするかの話

SATySFiのとき全く同じです。「LaTeXではどうやっても無理なので、plain TeXを使うことにして、強い裏技に頼る」ことにします。同じ方針で書くと、SATySFiのときとほぼ同様のものが完成するわけですが、さすがにそれでは退屈すぎるでしょう。

そこで今回は「なるべくコードを短くする」という条件を加える1ことにします。

TeXとTypstでpolyglotしてみた件

88バイトになりました。

Typst//\def~#1{\let~#1\def#1{\setbox0\box255\gdef#1{~}}}~\plainoutput\vfil\break\TeX\bye

plain TeX(例えばpdftex)でコンパイルしたときの出力。

TeXな出力

Typst2コンパイルしたときの出力。

Typstな出力

polyglotできてますね😃

まとめ

というわけで、枠が埋まらないとカレンダーがざんねん🙃になってしまうので、皆さん「TeX & LaTeX Advent Calendar 2023」にドンドン登録して幸せ😊になりましょう!💁


  1. その代わり、出力については「各処理系の既定のページ設定が適用された上で、本文領域に名前(“TeX”および“Typst”)だけが書かれていればよい」というルールにします。
  2. //はTypstの行コメントを開始する記法なので、Typstのコードとして見た場合は単に「Typst」と書いてあるだけです。“細工”は全てTeX側で行っています。

LaTeXでフツーの幸せな出力を得る方法

これは「TeX & LaTeX Advent Caleandar 2023」の☃日めの記事です
(7日めは CareleSmith9 さんでした。9日めは ujimushi at SradJP さんです)

今年のアドベントカレンダーの重点テーマは​「(La)TeXで幸せになる方法」​です。そもそもLaTeXは文書を作成するためのソフトウェアなので、「LaTeXで幸せになる」ための“正攻法”は「幸せな出力を得ること」になるでしょう。そして、LaTeXで手軽にできる​「幸せな出力」​と聞いて真っ先に思いつくものといえば、やっぱりコレでしょう。

ツイッタァー(現𝕏)のどっかの某氏🙃のアカウントを見に行けば見飽きるほど大量に豊富に貼られている​「いつものゆきだるま☃画像」​です(素敵😊)。

フツーの☃画像(素敵😊)

※説明の都合上、幸せと無関係な要素(🦆とか🙃とか)は除去しました。

……なのですが、ここで問題です

この画像を実際にLaTeXで作るにはどうすればよいでしょう?

※ツイッタァー(現𝕏)に上げているのはPNG画像ですが、PDF→PNGの変換は容易であるため、ここでは元の「PDFの画像(文書)」を作ることを問題にします。

とにかくフツーの☃画像してみる話

TikZしてscsnowmanしたら完成……しない話

一見するととても簡単な話に見えます。画像の背景は単純に色を塗っただけのものです。空の部分はグラデーションになっていますが、これもTikZで簡単に実現できそうです。単一のtikzpicture環境の中身をそのまま出力文書としたいのでstandaloneクラス1を利用しましょう。

% pdfLaTeX文書
% standaloneクラスを用いるので, tikzpicture環境の
% "中身"だけが文書として出力される.
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\begin{document}
% 72dpiでビットマップ画像に変換した際に
% "TikZ座標の1単位=1ピクセル"
% になるように, 単位を1bpに設定する.
\begin{tikzpicture}[x=1bp,y=1bp]
% 画像の大きさを強制的に指定する(480bp×360bp)
\useasboundingbox (0,0) rectangle (480,360);
% 地面
\fill[DarkGreen] (0,0) rectangle (480,40);
% 空(下部はSkyBlue!5で中ほどから上に向かって色が濃くなる)
\fill[SkyBlue!5] (0,40) rectangle (480,360);
\shade[top color=SkyBlue!65, bottom color=SkyBlue!5]
  (0,180) rectangle (480,360);
\end{tikzpicture}
\end{document}

このソースをpdflatexでタイプセットすると以下の出力が得られます。

背景の画像(非素敵😐)

完璧ですね!😃

あとはscsnowmanパッケージを追加して適当な位置に赤マフラーの☃を配置するだけです。

% pdfLaTeX文書
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz,scsnowman}%ゆきだるま☃
\begin{document}
\begin{tikzpicture}[x=1bp,y=1bp]
\useasboundingbox (0,0) rectangle (480,360);
\fill[DarkGreen] (0,0) rectangle (480,40);
\fill[SkyBlue!5] (0,40) rectangle (480,360);
\shade[top color=SkyBlue!65, bottom color=SkyBlue!5]
  (0,180) rectangle (480,360);
% 赤マフラーの☃を追加する(素敵)
\node at (232,248) {\scsnowman[scale=64,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown, snow=SkyBlue]};
\end{tikzpicture}
\end{document}

scsnowmanした結果(チョットアレ😰)

これで完成……アレレ、なんか☃が青ざめているようです😰 何が起こったのでしょうか?

scsnowmanでフツーに☃できない話

実は\scsnowman命令は既定では☃の中身を塗りつぶしません2。なので背景の空の色が見えてしまっているのです。(雪玉の中身についても同様です。)

とはいえ、\scsnowman命令にはいっぱいオプションがあったはずなので、恐らく「体の色」の指定もきっとできるでしょう。そう思ってマニュアルを見ると、bodyというオプションがあることがわかります。体の色を白にするために\scsnowmanのオプションにbody=Whiteを追加してみましょう。

% \scsnowman のオプションに"body"を追加
\node at (232,248) {\scsnowman[scale=64, body=White,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown,
  snow=SkyBlue]};

bofy=Whiteを指定した結果(アレ😱)

アレレ、顔がなくなってしまいました😱

この理由は、bodyオプションを指定すると輪郭線の扱い3が変わるからです。具体的には「全体の輪郭線は描かれなくなりその内部の線(顔のパーツの線やマフラーの輪郭線など)は白で描かれる4」ようになります。顔のパーツと体が同じ色なので見えなくなったわけです。

bodyオプションがどういう効果をもっているかは白以外の色を指定してみればわかるでしょう。以下の画像はbody=Turquoiseを指定した結果です。

body=Turquoiseを指定した結果

それでは、当初考えていたように「輪郭線をフツーに描いて中身を白く塗りつぶす」にはどう設定すればいいのでしょうか。実は現状のscsnowmanパッケージはこの設定をサポートしていません。フツーの☃画像を出力して幸せになるのは案外大変なようです😧

それでもフツーの☃画像したい話

というわけでここからが本題です。scsnowmanパッケージをフツーに使うだけではフツーの☃画像が作れないことがわかりました。フツーの☃画像を作って幸せになるにはどうすればいいでしょうか。ここでは3つの解決策を紹介します。

方法①:scsnowman+パッケージを使う

実はこの​「色指定の自由度がチョット足りない」​という問題は、3年前の「TeX & LaTeX Advent Calendar 2020」の記事で既に指摘されています。

そして、その記事の筆者により作製された「scsnowmanを拡張するパッケージ」であるscsnowman+ パッケージが公開されています。

scsnowman+ パッケージを読み込むと、\scsnowman命令が拡張されて「*-形」である\scsnowman*が使えるようになります。この\scsnowman*では「体の塗りつぶしの色を指定する」ためのbodyfillや「雪玉の塗りつぶしの色を指定する」ためのsnowfillなどの追加のオプションを指定して色をもっと自由に設定できるようになっています。

今回は体と雪玉を白く塗りつぶしたいのでbodyfill=White, snowfill=Whiteとオプションを指定しましょう。

% pdfLaTeX文書
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz,scsnowman+}%ゆきだるまプラス☃
\begin{document}
\begin{tikzpicture}[x=1bp,y=1bp]
\useasboundingbox (0,0) rectangle (480,360);
\fill[DarkGreen] (0,0) rectangle (480,40);
\fill[SkyBlue!5] (0,40) rectangle (480,360);
\shade[top color=SkyBlue!65, bottom color=SkyBlue!5]
  (0,180) rectangle (480,360);
% 拡張された"\scsnowman*"命令でフツーの☃を出力(素敵)
\node at (232,248) {\scsnowman*[scale=64,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown, snow=SkyBlue,
% bodyfill, snowfill オプションを設定
  bodyfill=White, snowfill=White]};
\end{tikzpicture}
\end{document}

scsnowman+ で☃した結果(素敵😊)

フツーの☃画像が完成しました(幸せ😊)

方法②:scsnowman-libを使う

ところで、どっかの某氏🙃は飽きもせず延々とフツーの☃画像を流し続けているわけですから、どっかの某氏🙃も何らかの手段を持っているはずです。どっかの某氏🙃が使っている自作のライブラリscsnowman-libは以下のレポジトリで公開されています。

※他のものと一緒になっていてヤヤコシイことになっていますが、scsnowmoan-lib/ディレクトリ以下のファイル群が該当のファイルなので、これらのファイル群を“TeXが見える場所”に配置してください。

scsnowmanパッケージでは「ユーザが自由に☃の形状を定義する」ための​「ゆきだるま定義ファイル(snowman definition file)」​という仕組が用意されており、scsnowman-libではその仕組を利用して標準と異なる外形の☃を実現するための様々なゆきだるま定義ファイルを提供しています。

※「ゆきだるま定義ファイル」によりscsnowmanを拡張する話は2021年のアドベントカレンダー5記事でも登場しています。
※便宜的に以降の説明では「ゆきだるま定義ファイル」のことを“ライブラリ”と呼ぶことにします6

今回はこの中で最も基本的な zrextra ライブラリ(ファイル名は scsnowman-zrextra.def)を利用します。このライブラリでは「標準と同じ外形だが塗りつぶしの色が別個に指定できる」という形状の☃を定義しています。

zrextraライブラリを読み込むにはscsnowmanパッケージの\usescsnowmanlibrary命令を利用します。

\usepackage{scsnowman}%ゆきだるま☃
\usescsnowmanlibrary{zrextra}%ライブラリ読込

これによりzrextra特有の機能の設定をするための\sczrextrasetup命令が使えるようになります7。ここでbodyfillキーにより体の塗りつぶしの色、snowfillキーで雪玉の塗りつぶしの色を指定します。

\sczrextrasetup{bodyfill=White,snowfill=White}

☃の出力に対してzrextraライブラリで定義した形状を有効にするには\scsnowman命令のshapeキーにzrextraを指定する必要があります。

\scsnowman[scale=64, shape=zrextra, …(他オプション)…]

以上を踏まえると、全体のソースコードは以下のようになります。

% pdfLaTeX文書
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz,scsnowman}%ゆきだるま☃
% zrextraライブラリを読み込んで塗りつぶしの色を指定する
\usescsnowmanlibrary{zrextra}
\sczrextrasetup{bodyfill=White,snowfill=White}
\begin{document}
\begin{tikzpicture}[x=1bp,y=1bp]
\useasboundingbox (0,0) rectangle (480,360);
\fill[DarkGreen] (0,0) rectangle (480,40);
\fill[SkyBlue!5] (0,40) rectangle (480,360);
\shade[top color=SkyBlue!65, bottom color=SkyBlue!5]
  (0,180) rectangle (480,360);
% shapeに"zrextra"を指定して☃をフツーにする(素敵)
\node at (232,248) {\scsnowman[scale=64, shape=zrextra,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown, snow=SkyBlue]};
\end{tikzpicture}
\end{document}

zrextraで☃した結果(素敵😊)

再びフツーの☃画像が完成しました(幸せ😊)

方法③:scsnowmanだけで頑張る

いままでに紹介した2つの方法はどれも「scsnowmanパッケージとは別のもの」を使うものでした。これらのソフトウェアは別個にインストールする必要があるためソースコードの可搬性という点で問題になる可能性があります。そういうわけで、最後にscsnowmanパッケージだけでフツーの☃画像を実現する“裏技”を紹介することにします。

この記事の初めのほうで「\scsnowman命令のbodyキーを指定したら“顔なし”になった😱」という話がありましたが、その“顔なし”の☃をもう一度見てみましょう。このままでは使いものになりませんが、この上にもう一度☃をbody無しで)描いてみるとどうでしょう。今度は塗りつぶしがないので下の白色がそのまま残り、しかも顔のパーツや輪郭線はちゃんと描かれることになります。なんとこれで所望の☃になっています!😲

実際にこの方針を試してみましょう。まずbody=Whiteを指定したscsnowmanを配置します。雪玉も内部を白く塗りつぶしたいので、ここではsnow=Whiteを指定します(これで雪玉全体が白く塗りつぶされる)。その他のパーツはここでは描く必要がないので省略します。

\node at (232,248) {\scsnowman[scale=64, body=White, snow=White]};

そしてその後に、同じ位置にbody無しの\scsnowmanを配置します。今度はsnowに輪郭線の色を指定します。

\node at (232,248) {\scsnowman[scale=64,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown,
  snow=SkyBlue]};

全体のソースコードは以下のようになりました。

% pdfLaTeX文書
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz,scsnowman}%ゆきだるま☃
% 他のやつは使わない
\begin{document}
\begin{tikzpicture}[x=1bp,y=1bp]
\useasboundingbox (0,0) rectangle (480,360);
\fill[DarkGreen] (0,0) rectangle (480,40);
\fill[SkyBlue!5] (0,40) rectangle (480,360);
\shade[top color=SkyBlue!65, bottom color=SkyBlue!5]
  (0,180) rectangle (480,360);
% "塗りつぶし用の☃"を描く
\node at (232,248) {\scsnowman[scale=64, body=White, snow=White]};
% 赤マフラーの☃を描く(素敵)
\node at (232,248) {\scsnowman[scale=64,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown, snow=SkyBlue]};
\end{tikzpicture}
\end{document}

意図通りになっているか、出力を確かめてみましょう。

“裏技”で☃した結果(素敵😊)

ちゃんとフツーの☃画像が完成しました(幸せ😊)

※実は先に紹介した記事でもこの“裏技”が密かに使われています🙃

なお、先程の説明では“同じ場所に2つの☃を出力する”のをTikZのレベルで行いましたが、LaTeXでの一般的な“重ね書き”のテクニックを用いることもできます。こちらの方が使いやすい場合もあるでしょう。

% 1つめの☃を現在位置を勧めずに出力する
\makebox[0pt][l]{\scsnowman[scale=64, body=White, snow=White]}%
\scsnowman[scale=64,
  muffler=Red, hat=Green, buttons=RoyalBlue, arms=Brown, snow=SkyBlue]};

まとめ

フツーの☃を出力してドンドン幸せ😊になりましょう!💁


  1. standaloneクラスはdvipdfmxとの相性が悪いのでこの組み合わせは避けた方が無難です。今の場合、日本語組版OpenTypeフォント出力も不要なので、エンジンにはpdfLaTeXを使うことにします。
  2. このscsnowmanの仕様(および後述のbodyの仕様)は恐らく、「記号(モノクロ絵文字)として☃を出力する」という発想に基づくのだと思われます。
  3. ちなみに、bodyを指定しない場合は輪郭線が「現在のテキスト色」で描かれます。
  4. さらに雪玉も自動的に(snowの色で)塗りつぶす設定に変わります。ちなみに、値を省略してbodyだけ指定した場合は「現在のテキスト色」をbodyに指定したのと同値になります。
  5. ……の場外乱闘編の28日目🙃
  6. そもそも読込用の命令の名前が \usescsnowmanlibrary なので……。
  7. ライブラリが \scsnowman 命令の書式を改変することは不可能なので、別個に設定命令を用意しています。

アドベントがはじまった ― \begin{texadvent2023}


TeX & LaTeX Advent Calendar 2023

TeX界における年末の恒例イベントとなったといっても過言ではないような気もチョットするかもしれないアドベントカレンダーが今年も始まりました。今年は12回目の開催となります。

重点テーマ

今年の重点テーマはコレです。

(La)TeXで幸せになる方法

徹底的にtabularrayを使いこなして幸せ😊になるのもよし、ニュースタイルの \expandafter 音頭を踊って幸せ😊になるのもよし、\futurelet にピッタリのビールとつまみを嗜んで幸せ😊になるのもよし、あるいはキホンに立ち返って、3日間不眠不休でTeX言語🤮を書きまくって幸せ🤯になるのもよし1、それぞれの人が考えるイロイロな「幸せメソッド😊🤯」を知識共有していきましょう!

※例によって、重点テーマは「必須」ではありません。あらゆるTeXネタを歓迎しております。

で、初日のネタは

こちらになります。

qiita.com

まだ参加できます!

TeX & LaTeX Advent Calendar 2023(#texadvent2023)は

まだまだ参加者募集中です。

TeXエンジンなネタ、TeXフォーマットなネタ、TeXディストリビューションなネタ、TeXエコシステムなネタ、 TeXコミュニティなネタ、TeXフォークダンスなネタ、TeXスイーツなネタ、TeXボディービルディングなネタ、その他、お持ちの方はぜひぜひ、

ご参加おねがいします!

今ならまだ好きな日を選べます! 登録はお早めに!

* * *

例によって「TeX以外」な人はこっち。

SATySFi Advent Calendar 2023

アレッ、「Typst Advent Calendar 2023」が存在しない? 何でなんでナンデ😧


  1. よいのか?🤔

去年のアレ(アレ)を振り返ってみる


TeX & LaTeX Advent Calendar 2023

昨年(2022年)の「TeX & LaTeX Advent Calendar」はこんな感じでした。

12/01zr_tex8rTeX言語でドドスコ(ラブ注入)してみた話
12/02h20y6mLaTeXで旧暦してみる
12/03hid_alma1026TeX by Topic by Comic challenge
12/04ut数式フォントについて、ちょっとだけ
12/05ut数式フォントについてとスペースについてと
12/06thth\NewDocumentCommand さえあればいい
12/07CareleSmith9[TeX][TikZ] TikZ で名刺作り
12/08thth\UseName でもエラーが出したい!
12/09zr_tex8r一言ツイートネタ🙃
12/10wtsnjpChatGPTのTeX知識を添削してみた | ラング・ラグー
12/11munepi〇〇env系ツールtlenvでTeX Liveもインストールしてみた
12/12zr_tex8r将来のpLaTeXでマフラーの色を指定する方法
12/13doraTeX英単語から発音記号を自動出力する
12/14yi_chemistMarkdown中の下付き文字をPandocでWord/LaTeX出力する際にLuaフィルターで処理してみる
12/15h20y6m(u)pLaTeXでもっと和文多書体する話
12/16zr_tex8r続・一言ツイートネタ🙃🙃
12/17250kunicode-mathとかdiffcoeffとか
12/18CareleSmith9[TeX][TikZ] y 軸を下向きに取る
12/19yukishitaLaTeXで独自に作図した図形を記号として使う
12/20MusicDumpTeX の PL ファイルを知ってみよう
12/21mattskala自分のドキュメントクラスを作ろう・アンスズ・mskalaのページ
12/22tasusuTeXはプログラミング言語(コンピュータ歴史博物館によると)
12/23wtsnjpとにかくWEB言語してみたい | ラング・ラグー
12/24k16shikanoモダンTeX on LaTeX入門
12/25zr_tex8r徹底解説! マクロの等価性を理解する

というわけで、今年はこれを1ミリも参考にせずに、自分が素敵だと思うネタを全力でぶつけていきましょう!

今年も思い切りTeXでAdvent Calendarする件について

思い切り!!


TeX & LaTeX Advent Calendar 2023

TeXLaTeX Advent Calendar 2023

とっておきのTeXLaTeXネタを皆で持ち寄って楽しむ
TeX & LaTeX Advent Calendar」
今年は 12回目 の開催となります。
皆さんの、心をこめた素敵なネタを例によってお待ちしております!
ハッシュタグは「 #texadvent2023 」
TeXLaTeX初心者大歓迎。 ←重要
TeXLaTeX非初心者大歓迎。

今年の重点テーマはコレです!

今年の重点テーマ

今年の重点テーマはコレです。
「(La)TeXで幸せになる方法」

TeXLaTeXの大きな特徴は 「とにかく拡張性が高い」 ということです。これは他の競合技術(SATySFi、Typstなど)と比較して顕著な点であり、LaTeXのレベルでは「他よりも圧倒的に豊富な量の拡張ライブラリを有する」、またTeXプログラミング(LuaTeXのLuaも含む)のレベルでは「(もはや無法といえるほどに)自由に機能拡張する手段が与えられている」という特徴をもちます。このため(La)TeXは「使いこなせばこなすほど文書の可能性が広がって、どんどん 幸せ になる」ソフトウェアということができるでしょう。

(La)TeXを使いこなす方法を広く伝授して、人類をもっと幸せにしていきましょう!

例によって「重点テーマ」は「制限」ではありません。

(前略)……以下のいずれかテーマに該当する何かを書きます。

  • 「(La)TeXで幸せになる方法」に大いに関連するTeXLaTeXネタ。
  • 「(La)TeXで幸せになる方法」にチョット関連するTeXLaTeXネタ。
  • 「(La)TeXで幸せになる方法」にサッパリ関連しないTeXLaTeXネタ。

このように、以前と同じく、TeXに関連するもの(\expandafter ベンチプレスとか、\futurelet スクワットとか、\afterassignment デッドリフトとか、……)なら何でも構いません。

皆さんの、心温まるTeXネタで寒い冬を乗り越えましょう☃️!