自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

卒論をLuaLaTeXで書く

この記事は

WORDIAN Advent Calendar 2017 - Adventar の1日目になります。

最高の卒業体験がしたい

卒業までの道は平坦とはいきませんでした。いや、まだ卒業してないんですが。まあ卒業可能性高ということで、浮かれている訳です。

卒業するためには何が必要なのか? それは卒論です。つまり最高の卒業は最高の卒論によって齎されるのです*1

最高の卒論

最高の卒論といっても色々あります。

  • 内容が最高の卒論
  • 体裁が最高の卒論
  • 卒業が可能な卒論

無論内容が最高であるに越したことはありませんが、そこは明日以降の自分に期待するしかありません。 よって考えるべきは卒論の見た目になります。

卒論を作成するにあたって利用できるツールは幾つかありますが、最終的には規定に沿ったPDFができれば勝ちです。 どのようにツールを選ぶかといえば、最高の執筆体験で選ぶべきでしょう。 最近はMSWord推しの人も随分見かけます。一太郎はテンプレートを配っている大学もありましたが、弊学はそうではなかったのでまあ除外します。

ところでMSWordで作成された.docxファイルには大きな欠陥があって、 platexコマンドやlualatexコマンドで処理できないんですね。ということでlatexコマンドが叩ける.texを使っていきたいと思います。

ここで弊大学が学内で配布している卒論テンプレートを見てみると

  • 使用するクラスファイルがjreport*2
  • bf命令とか残りまくってる
  • timesを読み込んでいる
  • アンダーラインと長い題目名で壊れる

など多くの学生が悲鳴を上げる内容になっています。そして皆思うでしょう、「俺が作るしかない」と。 しかし、自分で配布されたテンプレートを改造していく学生でもクラスファイルを変更する例はあまり無いようです。

幸い2017年を生きる僕達はTeXLive2017という資産を使うことができます。 これは大きなアドで、bxjsclassesを使えるしLuaLaTeXのバージョンは1.0以降だし、つまり結論としては

卒論をLuaLaTeXで書く

LuaLaTeX用に書いた.texlualatexコマンドで処理できるんですね。.tex中でLuaが書けるとか余録もあります。

LuaLaTeX

LuaLaTeXはpdftexの実装の1つです。絶賛開発中な雰囲気を数年間出してたので敬遠していた人も多いかと思いますが、もうバージョン番号は1.0を超えているんですね。pLaTeXなどと比較すると枯れているとはとてもとても言えませんが、そろそろもうちょっと信頼されてもいいんじゃないでしょうか。

bxjsreport.cls

「LuaLaTeX使うって言ってたのに汎用(pLaTeX、XeLaTeX、LuaLaTeXで利用可能)クラスかよ」 って話ではあるんですが、「卒業が可能な卒論」を目指す立場なので、lualatexでのみ問題が発生する場合などに備えて選びました。

sourcehan

現代を生きる僕達には他にも源ノ角ゴシック、源ノ明朝の利用が許されています。pLaTeXから利用するにはちょっと手間ですが、LuaLaTeXなら1行程で済んでしまいます*3

作ってみた

github.com

main.tex

documentclassの宣言と各種パッケージ、分割した各章の読み込みしかほとんどやらせていないですね。 \input{}は便利。\include{}は改ページしてしまうので注意しましょう。あと、元のテンプレートから引き継いだ突然の余白とか。

\documentclass[autodetect-engine,dvi=dvipdfmx,a4paper,base=11pt, jafont=auto, ja=standard]{bxjsreport}
\geometry{left=25truemm,top=35truemm,right=25truemm,bottom=50truemm}

\geometry{left=25truemm,top=35truemm,right=25truemm,bottom=50truemm} bxjsでは最初にエンジンをオプションで書いておく必要がありますが、autodetect-engine, dvi=dvipdfmxとすることで勝手に判別してくれるようになります。

jafont=auto,ja=standardでは、 jafont=autoによってupdmap-kanji-config-*で設定されたフォントが読み込まれるようになります。 autoではなくここをsourcehanにするとsoucehanを使ってくれるようになります。ja=standardにしておけば滅多に間違いは無い筈です。

base=11ptとしています。これは欧文文字サイズ基準が11ptになる指定です。日本語文字の大きさ基準を指定するjbaseもありますが、元のテンプレートでの指定[a4paper,11pt]{jreport}を考えるとこの指定が正しい筈です。

\geometryは他のクラスファイルであれば\usepackage[option]{geometry}とする所ですが、bxjsがgeometryを使ってる関係で既に読み込まれているのでこういう表記になります。

cover.sty

\usepackage[B]{cover}
\input{personal}

卒論最大の鬼門と名高い表紙作成用スタイルファイル。基本的には\maketitle命令の改造をしているパッケージ。 オプションのBは学部生を表します。修論の場合はMを指定すると良い感じになる筈。 必要事項をpersonal.texに書かせて読み込む形にしています。

ulemパッケージを持ってくることで長文題目名でも壊れないという、皆が辿ることをやっています。 正直題目名以外は長くなるケースがほとんど無いので元の\underline指定のままで良い。というか\advisor\andを挟んだりすると\ulineだと挙動が違ったりするのでそのままの方が良いです。

thesis.sty

\usepackage[B]{thesis}

基本は卒論の書式に合わせての改変命令集。 \andを全角空白2つ分に変えたり、abstract環境を中央寄せ「要旨」見出し付きに変更したりします。

packages.tex

input{packages}

必要パッケージを\usepackageしまくる場所。

  • comment comment環境で囲むことで該当箇所をコメント化。試行錯誤するときに便利です。
  • graphicx 画像、図を用意するために。実質必須パッケージです。
  • hyperref メタタグ入れたりPDF内のリンクを用意したりします。
  • url urlを入れるときに使います。
  • newtxtext, newtxmath 実質必須パッケージ。より良いTimes New Romanを使うようにします。

終わり

最高の卒論にしていこうな。

明日の担当は @hid_alma1026 君です(棒) !

WORDIAN Advent Calendar 2017 - Adventar

*1:卒論発表会? 知らない子ですね......

*2:長らくjsreportが存在しなかったという事情も関係ありそう

*3:実際にはbxjsclassesの場合オプションに数文字渡すだけです

microの textlint plugin(575)

愛用しているエディタで、コーディングではなく日本語を書く人はかなり多いでしょう。 文章を書くなら文書校正が要りますね。そんなときに便利なtextlint。 で、まあエディタ上から使いたくなりますよね。幸いにも僕の愛用しているmicro-editorは 拡張をlua(5.1)で書ける、ということで書きました。

github.com

使い方

textlintが入っている前提です。.textlintrcは通常のtextlint同様に用意してください。

microで編集中に Ctrl-e textlint で該当行に表示が出ます。便利!!!!!

microのプラグイン作成

既存のlinter-pluginを参考にしました、というかほとんど構成が一緒。 JobSpawnで実行してもらって、出力結果を1行ずつ加工してGutterMessageに突っ込むというだけです。

ハマったところ

GutterMessageに送ったstringが、マルチバイト文字のところが一文字飛ばしになって表示されていてかなり時間をとった。結果から言うと重なって表示されていたために一文字飛ばしに見えていたというオチ。半角スペースをマルチバイト文字の間に入れていくという解決策を取りました。このためにutf8.luaを利用させてもらっていて、オリジナルの1ファイルで完結していないから公式のPlugin-Channelに乗せてもらうようPR出すのを躊躇っているところ。日本語をGutterMessageに使いたいときは毎度同じ手法を取る必要があるかもしれない。

WingoWMのPythonScriptサンプルをPython3用に直してみた

WingoはWindow Managerの1つでGolang製です。 が、socketでPythonからWingo-cmdのコマンドを実行できます。サンプルがPython2系だったのでPython3系に書き直してみた。

本当はMessageに色々やらせたいんだけどただの文字列以外だとどうにも動いてくれないので一旦保留かな。

19:30追記 'Message "%s"' % hoge の形で可能だった。はー。

# -*- coding:UTF-8 -*-

import os
import os.path
import socket

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
f = os.path.join(os.getenv('XDG_RUNTIME_DIR'), 'wingo', os.getenv('DISPLAY') +  '.0')
sock.connect(f)


def recv(sock):
    data = ''
    while chr(0) not in data:
        data += sock.recv(4096).decode()
    return data


def gribble(cmd):
    message = ("%s%s" % (cmd, chr(0)))
    sock.send(message.encode('utf-8'))
    return recv(sock)

print(gribble('GetClientName (GetActive)'))

sock.close()

モチベイション

今日は筆が乗らなかった。神絵師っぽい。

この記事は

www.adventar.org

の15日目になる。

まあ描かないわけにもいかない。

幼女戦記、1月からアニメ開始だそうですね。キャスト的にも楽しみです。

そんなわけでバケモノこと幼女、ターニャちゃん

f:id:hidden_alma:20161215235535j:plain:w350

推しキャラに自分と同じ服着せたい……着せたくない?

この記事は

www.adventar.org

の12日目。

一日あったにも関わらず完成しなかったorz

何がしたかったのか

神絵師は可愛い女の子に好きな服を着せられる(描ける)訳です。 そうなると気持ち悪いオタクである僕なんかは当然自分の普段着るような服を着せて 悦に浸りたくなる訳なんだな。

今朝は寒かった

そりゃあ-4℃ってあんたベッドから出てエアコンの有線コントローラ操作にも行けない寒さですよ。 そんな日なもんだから、つい先日入手したモフモフ暖かなアウターが着たくなるってもんで。モフモフに包まれた可愛い女の子は可愛いって話で。

描いた(描けていない)

f:id:hidden_alma:20161212225219j:plain:w350

f:id:hidden_alma:20161212231009j:plain:w350

ところで顔を上手く描けないと普段と違う服を着せた推しキャラがそのキャラに見えないっていう問題があって。皆さん12月23日以降にポッピンQ*1見に行きましょう。

姫狩りインペリアルマイスターをしていたら描く時間がなかった。今は反省している*2

明日は@maccha_nuceさん。

*1:http://www.popin-q.com/

*2:そんなんばっかだなお前。

1hドロは言い訳にも向く

この記事は

www.adventar.org

の11日目である。10日が事故っているが、多分大丈夫。ギリギリまで登録が無かったので今日も僕です。

1hで描く

短時間で絵を仕上げるのも神絵師に要求されるスキルだと思われる。

短時間で描くコツはどうやら * 線をそのまま残しっぱなし * パステル塗り

あたりをするとごまかせる気がしたので、そうした。

今日はハピメアの内藤舞亜ちゃんを描きたかった。

f:id:hidden_alma:20161211230422j:plain:w350

明日はきっとちゃんと。

アオリ失敗録、若しくは希実香ちゃんは可愛い

この記事は

www.adventar.org

の7日目の記事になる。

動画講座

先日の記事でも少し触れたが、Pixiv動画講座「sensei イラストの描き方を動画で学ぶ! - sensei by pixiv」というのがあって、最初の2週間は無料、以後プレミアム会員にならないと全動画が見られないというサービスがある。 「全」動画を見るには月額課金というだけで、チラッと見るなら別にお金はかからないので気になった方はどうぞ。

で、何が学べるのかというと、頭身を図ったりアタリをつけたりする、まあ基本的なことから始まる。僕が見ているのもまだこの辺り。 進んでいくとキャラクター、人体、背景と種類が分かれていく。

構図

大胆な構図で勝負をかける話をされたので、触発されて橘希実香ちゃんのアオリに挑戦、撃沈した。失敗の原因を挙げていく。

f:id:hidden_alma:20161206051054j:plain

  • まず服の構造を理解せず描いた
  • 髪と重力の関係を上手く描けなかった
  • 影主体の塗りの基礎ができていない

悔しかったので一時間で顔のみを描いた。 f:id:hidden_alma:20161207224142j:plain:w350

希実香ちゃんについて詳しくは

終わりに

8日目は@ioriveur。ここまで来たら完走したいので登録はガンガンしてくれると嬉しいです。