スキップしてメイン コンテンツに移動

投稿

LaTeXで宛名ラベルシールの差し込み印刷をする

この記事は TeX & LaTeX Advent Calendar 2021 の20日目の記事です。 19日目は hid_alma1026 さん、21日目は 7danmoroboshi さんです。   はじめに 業務でラベルシール用宛名ラベルの作成に ラベル屋さん というソフトを利用しています。しかし公式サイトの使い方を見る限り、連名の有り無しなどの条件分岐に対応したラベル作りに対応できなさそうです。そこでLaTeXのtikzとtcolorbox, datatool, intcalcパッケージなどを利用して宛名ラベルの差し込み印刷に挑戦してみました。 TeXエンジンは、フォントの変更がしやすいという噂のLuaTeX-jaを利用することにしました。 datatool はデータセットからdata plotや表作成などが行えるLaTeXパッケージです。日本語では ブログ天地有情  [LaTeX] datatool --- CSVデータからグラフやテーブルを作成 で使い方を見ることができます。csvなどの外部データを利用することもできて、今回は作成したcsvファイルを読み込み、定型フォーマットに文字列を流し込むのに利用しました。 準備 まずは宛名ラベルの差し込み印刷に利用するcsvファイルを用意します。今回は 疑似個人情報データ生成サービス を利用して、次の画像ようなcsvファイル(personal_information.csv)を作成しました。 csvファイルのヘッダ部分は取り除いています。ヘッダ部分がある場合もdatatoolの記述を変えれば利用できるようです。各列の意味は次の通りです。括弧内はdatatoolで扱う際のkeyを表しています。 名前(Name) 郵便番号(PostalCode) 住所1(Address) 住所2(address) ご家族様表記の有無(ToFamily) 連名1(Family) 連名2(family) 出力結果 上のcsvファイルを元に作成した宛名ラベルのpdfファイルの画像を載せておきます。あくまでも画像の住所・氏名はダミーで実在しません。 1枚目の画像は印刷後に余ったラベルシールの再利用を想定して、ラベル開始位置を指定できるようにし、開始位置をずらしたものです。画像では4番目のラベル位置から宛名を配置していま...

OpenCv-PythonとpdfLaTeXで自炊pdfファイルの位置調整

この記事は TeX & LaTeX Advent Calendar 2021 の11日目の記事です. 10日目は t_kemmochi さん,12日目は yukishita さんです.   動機  書籍の自炊にブックエッジスキャナーの AvisionのFB2280E を利用しています。書籍を裁断せずに1ページずつスキャンを行うため、本の開き具合などの要因で本の序盤、中盤、終盤で得られるスキャン画像の位置ずれが大きくなります。以前からpdfLaTeXを利用して位置調整をしていたのですが、OpenCvを利用して自動化できそうだったので試してみました。 やること 本記事では、pdf化した文書画像の版面(文字の印刷された部分の意味で使います)を半自動的に計算してpdfの画像の位置調整をするために、OpenCvとpdfLaTeXを利用する方法を解説します。手順としては Pythonの画像認識用ライブラリであるOpenCvを利用して版面を計算する。 テンプレートエンジンライブラリのJinja2を使って画像のバウンディングボックスなどを記述したLaTeXファイルを作成する。 pdfLaTeXでpdfを読み込み、位置の調整されたpdfを作成する。 という流れになっています。作業環境としては、 Visual Studio CodeをRemove - WSL拡張機能と併用 しています。PythonやそのライブラリはWSL上のUbuntuにインストールし、他にもpdfファイルを他のファイル形式にするためにpoppler-utilsなんかもインストールしました。 参考記事 OpenCvを利用した文書画像のレイアウト解析については ブログSomething Like Programming内の記事 Document Layout Analysis githubリポジトリ rbaguila/document-layout-analysis OpenCv-Pythonチュートリアル を参考にしました。 pdfLaTeXがpdf加工に使えるという話と、pdfpagesパッケージの存在は doraTeXさんのブログTeX Alchemist Onlineの記事 pdfTeX による見開きPDFの結合・分割 で知ったように思います。 画像pdfをpdfpagesで取り込む ま...

LaTeXの出力pdfにグリッドラインを引く(自炊pdfの画像位置調整)

普段購入した専門書をスキャンしてpdfファイルにし、ipadやPC画面で読むようにしています。書籍のスキャンには AvisionのFB2280E を利用しています(国内の代理店での価格は私が購入した海外の通販サイトの値段の3倍くらいになっているようです)。国内では同じくらいのスペックのブックスキャナーとしてPlustekのOpticBook 4800が手に入りやすく、私もこちらを所持していましたが故障のため買い替えました。FB2280は後発のためスキャン速度はOpticBook 4800より速いです。しかし付属のソフトがよろしくないことと、スキャン位置とボタン位置が離れていてスキャンし辛いなどの短所もあります。 本体付属ソフトは使いづらいため、スキャンソフトは NAPS2 を利用しています。 また非破壊のスキャナーであるために、解体・裁断してスキャンするよりもページごとの位置ずれがかなり大きくなります。また、スキャンしたときに本の背に近い部分は光が届かず黒い帯がでます。 黒い帯部分の削除には Briss というJava製のソフトを利用しています。GUI操作で偶数ページと奇数ページを分けて一度にcrop操作を行えるので便利です。 pdfをcropしてもreaderで表示される部分が変わるだけで、元の画像情報は残っています。表示されない部分を完全に消してしまうには、今の所AdobeのAcrobat PRO DCの「非表示情報を検索して削除」を利用する方法しか寡聞にして知りません。非表示情報の削除と傾き補正、OCR処理にはAcrobat DC Proを利用しています。 自炊したpdfの余白についてwebで検索すると、ipadなどで読むために余白を削りたい人が多いようです。私は適切に余白があるほうが圧迫感が無く読みやすいと感じるので,cropしたpdfをpdfTeXで処理して余白の追加をしていました。 最近はページごとの上下左右の振れが気になってきたので、余白の調整に試行錯誤しています。以下からが本題です。 TeX-LaTeX Stack Exchangeの この記事 を元に、 eso-pic , pdfpages , tikzパッケージを利用してpdfファイルの全面にグリッドを表示させるようにしてみました。画像では画像位置の調整のためのガイドラインの表示も行っています。 ...

yatex-modeでmozc-im使用時に,ドル記号入力で直接入力に切り替える.

emacsでyatex-modeを使っているときに,日本語入力中でもドル記号を入力すれば,直接入力に切り替わりドル記号が2つ入力されて欲しい人間です. mozc.elを使っているときには,mozc-mode-mapを書き換えることで 上記に対応していた のですが,mozc-imではキーマップが用意されていません.そこでキーイベントを拾う関数であるmozc-im-input-methodにアドバイスを定義することで上記を解決してみました. (require 'mozc-im) (setq default-input-method "japanese-mozc-im") (defadvice mozc-im-input-method (around insert-dollars (event)) (if (and (eq major-mode 'yatex-mode) (equal event ?$)) (YaTeX-insert-dollar) ad-do-it)) (ad-activate 'mozc-im-input-method) mozc.elでも,mozc-mode-mapを書き換える方法でなく,これと同様にmozc-handle-eventという関数にアドバイスを定義すれば同じ挙動を示します. 追記:defadviceは古いそうなので,advice-addを使用したものに書き換えてみました. (require 'mozc-im) (setq default-input-method "japanese-mozc-im") (defun mozc-im-input-method--yatex-insert-dollars (orig-fun key) (if (and (eq major-mode 'yatex-mode) (equal key ?$)) (YaTeX-insert-dollar) (funcall orig-fun key))) (advice-add 'mozc-im-input-method :around #'mozc-im-input-method--yat...

mozc-tempを使ってみた。

ac-mozcの後継である mozc-temp というものがあるということで使ってみました。 英字を直接入力して、変換したい文字列の直後でAlt-nを打鍵することで変換候補が表示されます。 少し利用してみたところ、yatex-modeでは直接入力でしか使わないような変換してほしくない記号も変換されて不便なので、以下のように変換候補の文字に関する正規表現を変更してみました。 ;;mozc-temp ;;(global-set-key (kbd "M-n") #'mozc-temp-convert-dwim) (global-set-key (kbd "M-n") #'mozc-temp-convert) ;;mozc-tempの変換候補文字に関する正規表現を変更する (add-hook 'yatex-mode-hook '(lambda () (custom-set-variables '(mozc-temp-prefix-regexp (let ((convertibles "][,.:0-9A-Za-z-")) (format "\\(?:^\\|[^%s]\\)\\([%s]+\\)\\=" convertibles convertibles))) ))) 使用していて気になる点は、 ひらがなやカタカナに変換するときにAlt-nの後でCtrl-H, Ctrl-Kを打鍵する必要があり、打鍵回数が増えるので、ひらがな・カタカナに直接変換するキー割り当てが欲しい。 mozc.elを使って入力をしているときには、変換候補が表示されているときに続けて文字を打ち込むと変換確定扱いになるのに対し、mozc-tempではEnterを押して決定しないと変換確定にならないので、やはり打鍵回数が増えて不便. といったところでしょうか。後者がかなり気にかかるので使用頻度が減ってしまいましたが、日本語入力モードに切り替えるのを忘れて文字列を打ってしまった後に変換可能なのでその用途で使っています。

定理を再掲したときに定理番号も揃える(amsmathのtagと似た挙動の定理環境を作る).

LaTeXで定理を再掲する方法についての話題です。 追記:2026/01/07:keytheoremsやthm-restateなどで検索すると幸せになれます。 amsmath.styで定義されているtagコマンドは,数式環境の式番号部分を自由な文字列で置き換えることができるようになっています.下に例を挙げます. この画像を生成するLaTeXのコードは次のようになります. \documentclass[a4paper,dvipdfmx,uplatex]{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true,% ,colorlinks=true,linkcolor=blue]{hyperref}% \usepackage{showkeys} \usepackage{amsmath} \numberwithin{equation}{section} \begin{document} \section{amsmath.styに含まれるtagコマンドの挙動} \begin{equation} \label{eq:euler} e^{i\theta}=\cos\theta +i\sin\theta \end{equation} \eqref{eq:euler} \section{amsmath.styに含まれるtagコマンドの挙動の検証} \begin{equation} \label{eq:euler2} \tag{\ref{eq:euler}} e^{i\theta}=\cos\theta +i\sin\theta \end{equation} \eqref{eq:euler2} \end{document} 最初のequation環境にeq:eulerというlabelをつけ,第2のequation環境ではtagコマンドを使って数式番号部分に¥ref{eq:euler}と書くことで,実際に表示される式番号が第1のequation環境のものと同じになっています.この第2のequation環境にはeq:euler2というlabelを付けており,これを¥eqref{eq:euler2}と参照すると表示される番号は第1のequation環境のものであるにも...

bxjsclsの不具合?

bxjsbook.clsで数学の勉強ノートを取っているのですが,目次に表示されるページ番号が左揃いで3桁までを想定しているらしく,ページ数が1000を超えると一桁はみ出て見た目が残念なことになります. どうにかならないものか. 追記:2019/03/01:TeX QAの 「 ページ数が1000ページを越えた目次について」 で解決策が提示されています.