くらげnote

"ぼやき" by くらげ(fal)

Gmail を LINE に転送する 2022/01

あまり数学とは関係ないですが、忘れそうなので個人用の備忘録として記事にします.

やりたいこと

  • 受信したGmailをLINEに転送する
  • 無料で行う

GAS ("Google Apps Script" の略らしい) を用い, Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログさんのコードを用いることで実装できた.

JavaScriptを初めて触った(そのうえ, 今後触る予定もない)ので, 詰まったことや忘れそうなことだけを記載.

LINE Notify Token を設定する。

LINE Notify にログインし、 右上の「メニュー - マイページ 」を選択. ページ下部にある「アクセストークンの発行(開発者向け)」から、 「トークンを発行する」をクリック. トークン(長い英数字の文字列)が表示される. トークンは1度しか表示されないので, コピーを忘れずに. (発行は1回きりではないので, 忘れたらやり直すこともできるが...)

Google Apps Script (GAS) の設定

Apps Script – Google Apps Script の左上、「新しいプロジェクト」を選択.

GASのホーム画面

コードを書く.

1. LINEトークンを貼り付ける.

 // LINE Notify のトークンを hoge に貼り付ける
const LINE_NOTIFY_TOKEN = 'hoge'
const ENDPOINT = 'https://notify-api.line.me/api/notify' 

先程コピーしたLINE Notify のトークンを貼り付ける. (元の記事の中には、「プロパティに格納しておきましょう。」などと記述があるのですが、現在(2022/01/26)のバージョンでのやり方が不明でした... 取り急ぎ、このコードで動きます)

2. 転送したいメールを検索する条件を与える

// Fromのアドレスを指定
const FROM_ADDRESS = ['abc@example.com','important.com' ].join(' OR ')
// 同期する間隔(分)
const MINUTES_INTERVAL = 5

上記の例では, abc@example.comと, important.comのどちらかが, Fromのアドレスに含まれる場合にメールが転送される. MINUTES_INTERVAL は同期する間隔を指定し, 例では5分となる.

他にも,

// To のアドレスを指定
const TO_ADDRESS = [''].join(' OR ')
// Subject を指定
const SUBJECT = [''].join(' OR ')

などもできる. 尚, [''] のままにした場合は, 空文字列となり全てのメールが転送される.

3. 検索条件を指定する

  const now = Math.floor(new Date().getTime() / 1000)
  const intervalMinutesAgo = now - (60 * MINUTES_INTERVAL)
  const query = `(is:unread from:(${FROM_ADDRESS}) to:(${TO_ADDRESS}) subject:(${SUBJECT}) after:${intervalMinutesAgo})`
  const threads = GmailApp.search(query)

query に検索条件をすべて詰め込んでいる.

  • "is:unread"は未読のみを対象にする. 指定しなければ既読のものも含まれる.
  • "from:(${FROM_ADDRESS}) to:(${TO_ADDRESS}) subject:(${SUBJECT}) "は先程格納した値を使うように指定する.
  • Date().gettime() で, UNIX 元期 からのミリ秒が得られるので, 秒に換算したものをnowに格納. intervalMinutesAgoMINUTES_INTERVAL 分前であるから, これ以後に受け取ったメールのみを転送するようにafterで指定.

4. 転送する文言を得る

  for (const messages of mails) {
    const latestMessage = messages.pop()
    messageDate = latestMessage.getDate()
    messageDate = Utilities.formatDate(messageDate,"JST", "yyyy/MM/dd HH:mm:ss")
    const notice = `
--------------------------------------
件名: ${latestMessage.getSubject()}
受信日: ${[messageDate]}
--------------------------------------

${latestMessage.getPlainBody().slice(0, 350)}
`
    notices.push(notice)

    latestMessage.markRead()
  }

元のサイトのコードでは日時表記がmmddyyyyだった & 時刻がアメリカ時間で表示されるので, 手を加えた.

    messageDate = latestMessage.getDate()
    messageDate = Utilities.formatDate(messageDate,"JST", "yyyy/MM/dd HH:mm:ss")

yyyy/MM/dd HH:mm:ss 表記にできる. ("HH"を"hh"にすると12時間表記になる. ) formatDate の詳細は Google Apps Script メモ - formatDate にあった.

latestMessage.markRead() をつけることで, メールを既読にできる.

完成

メモしておきたいことは以上.

Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログさんの記事がとても勉強になった. (というかJavascriptを何も理解しないまま完成してしまった...)

参考文献

Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログ

https://gadgelaun.com/?p=18985

Google Apps Script メモ - formatDate

LaTeXで日付計算

この記事を読んでできること

  • LaTeXのパッケージ datetime2 を用いて, 2つの日付間の日数を計算する

最初に結論

\DTMsavenow{today}
\DTMsavedate{recent}{2021-01-01}
\DTMsavedate{future}{2022-01-01}
\newcount\daterecent
\newcount\datefuture
\DTMsaveddatediff{today}{recent}{\daterecent}
\DTMsaveddatediff{future}{today}{\datefuture}

2021-01-01から今日までに何日経過したかが\daterecent, 2022-01-01まで今日はあと何日かが\datefutureに格納される.

計算した数値を使うには

\number\daterecent
\number\datefuture

のように, \numberを前につけると出力される.

実際に計算してみた

\DTMsavedate{first}{2021-01-01}
\DTMsavedate{third}{2021-01-03}
\newcount\datediff
\DTMsaveddatediff{third}{first}{\datediff}
\number\datediff

出力は2であったので, はじめの日を含まない 日数を計算しているようだ.

参考

CTAN: Package datetime2

Windows × VSCode で構築する快適なLaTeX環境

この記事を読んでできること

  • .tex ファイルから .pdf ファイルを(ショートカットキーで)自動生成する
    • ただし, upLaTeX を用いているものとする
  • 複数回ビルドが必要な場合もショートカットキーは1度押せばできる
  • 不要な中間ファイルも削除する

1 必要なもの

  1. TeX Live 20xx のインストール
    (参考: TeX Live - TeX Wiki
  2. VSCode のインストール
    (ダウンロード先: Visual Studio Code – コード エディター | Microsoft Azure
  3. (あった方がいい) SumatraPDF のインストール
    (ダウンロード先: Free PDF Reader - Sumatra PDF

2 (up)LaTeX を使うための VSCode

VSCodeを起動し、 Ctrl + Shift + X拡張機能ウィンドウを開ける

  1. LaTeX Workshop をインストール
  2. LaTeX language support をインストール
  3. Japanese Language Pack for Visual Studio Code をインストール
    • 日本語化する必要がなければ不要
  4. (お好みで)Bracekt Pair Colorizer 2をインストール
    • 対応する括弧に色付けを行う
    • LaTeX Workshop と相性が悪いらしいが,今のところ不具合はない

インストールしなくても, 標準機能に組み込まれるようになりました.

    "editor.guides.bracketPairs": true,
    "editor.bracketPairColorization.enabled": true,

setting.jsonに書き込めば十分です. 参考 : メンテナンスされなくなった Bracket Pair Colorizer 2 から VS Code に標準搭載の括弧記号色付け機能に乗り換えよう | DevelopersIO

3 VSCode の設定(ビルド関係)

upLaTeX を用いることとします.

  • Ctrl + , で設定を開く
  • 右上の「設定(JSON)を開く」を選択

  • setting.json に以下を記述。
    もし既になにか書き込んである場合は、下に追加すれば良い

 "latex-workshop.chktex.enabled": false,
 "latex-workshop.latex.autoBuild.run": "never",
 "latex-workshop.latex.outDir": "%DIR%",

 // build commands
 "latex-workshop.latex.tools": [
   {
     "name": "Latexmk (upLaTeX)",
     "command": "latexmk",
     "args": [
       "-f",
       "-gg",
       "-pv",
       "-synctex=1",
       "-interaction=nonstopmode",
       "-file-line-error",
       "%DOC%"
     ]
   },
 ],
 // to build .tex file written in LaTeX(upLaTeX)
 // using .Latexmk 
 "latex-workshop.latex.recipes": [
   {
     "name": "upLaTeX",
     "tools": ["Latexmk (upLaTeX)"]
   },
 ],
 
 // delete intermediate files every building
 "latex-workshop.latex.autoClean.run": "onBuilt",
  // select intermediate files which are deleted
 "latex-workshop.latex.clean.fileTypes": [
    "*.aux","*.bbl","*.blg","*.idx",
    "*.ind","*.lof","*.lot","*.out",
    "*.toc","*.acn","*.acr","*.alg",
    "*.glg","*.glo","*.gls","*.ist",
    "*.fls","*.log","*.fdb_latexmk",
    "*.dvi","*.synctex.gz","*.nav",
    "*.snm","*.vrb","*.pl", ".000"
  ],

4 VSCodeの設定 (キーボードショートカットの編集)

必須ではないが、作業効率を上げることができる

  • Ctrl+K Ctrl+S でキーボードショートカットを開く
    • (私自身が最初、引っかかったので念の為)
      Ctrl+K Ctrl+S
      Ctrlを(ずっと)押しながら K 押す→K離す→S押す→S離す」
      を行えば良い
    • 左上の「ファイル>ユーザー設定>キーボードショートカット」でも開ける
  • ビルドするショートカットキーを LaTeX Workshop: Build LaTeX project に設定
    • Ctrl + Shift + B, Ctrl + Alt + B,Ctrl + Shift + Alt + B あたりだと衝突もしないのでおすすめ
  • LaTeX Workshop: Build with recipe だとレシピの選択もできる
    • 複数のレシピを使い分ける必要がある場合はおすすめ
  • PDFファイルを表示するショートカットキーを LaTeX Workshop: View LaTeX PDF file に設定
    • Ctrl + Alt + V がおすすめ

5 .latexmrc ファイルの作成

VSCode で LaTeX を書く (2018) - Qiita を参照ください.

参考記事がなくなると(私が)困るので、必要なところを引用すると

以下の内容をコピーして、現在のユーザーのホームディレクトリに .latexmkrc として保存してください。
なお、Windows の場合はファイル名がピリオド (.) で始まるファイルを作成する場合は、 [ファイル名].とする必要があるため、.latexmkrc.というファイル名でファイルを保存するようにしてください。

latexmkrc ファイルの中身を全て引用するのはやりすぎな気がするので、必要な方は参考記事VSCode で LaTeX を書く (2018) - Qiita(再掲)を確認ください.

蛇足として、ホームディレクトリは通常C:\Users\<ユーザ名>とすればよい.

細かいことの書いてある参考記事はこちら. Latexmk - TeX Wiki

6 テストしてみる

\documentclass[dvipdfmx, uplatex]{jsarticle}
\usepackage{amsmath}
\begin{document}
これは\LaTeX を用いて書かれています.

平均値の定理:
$f(x)$$[a, b]$ で連続, $(a, b)$ で微分可能のとき, 
\begin{align*} 
  \frac{f(b)-f(a)}{b-a}=f^{\prime}(c),\, a<c<b
\end{align*}
を満たす$c$が存在.
\end{document}

更新履歴

211211 upLaTeX であることを明記, #6 テストの部分を追加, Bracekt Pair Colorizer 2に関する記述を更新

Keyball46 ビルドログ

購入のきっかけ

購入以前はArabica3/7を常用していた. 満足度は高かったものの, トラックボールと同時に使おうとすると右手を離す動作が必要で, ショートカットキーとカーソルを交互に使う際に不便を感じていた.

そんな中このツイートを見て即決.

注目度も高く売り切れ必死だと思ったので, ツイート通知をオンにして待ってました笑

購入

【委託】Keyball46 – 遊舎工房

キット外に購入したもの

もともと持っていたものを流用したもの

  • ケーブル類

  • TEX ADA 104 US キーキャップセット

  • Kailhロープロ無刻印キーキャップ1U

組み立て

公式のビルドガイド通りに進める.

github.com

オプション類については

とした.

キースイッチのルブも行った.これに一番時間がかかったような気もする.

詰まった点

  • ソケットを表から付けていた(写真よく見てなかった)

  • トラックボールケース装着(ボトム側からしめるのがけっこう大変だった)

  • Remap のマウス関連が使えない点(左・中・右クリックは独自に定義されていてAnyキー扱いになっている)

完成

f:id:fal_math:20210710003430j:plain

感想

難しい工程は少なく, 悩むことなくできた. ビルドガイドがとても丁寧だと感じた.

親指のみロープロにできるのが新鮮で,便利だと思う.

Remap に対応しているのもとても助かった. ちょっと変えたいときにすぐ変えられる.

キー数に余裕があり, 矢印キーを入れられたのが個人的には嬉しい.

スクロールホイールオプションや左手トラックボールも試してみたい. 早くも2台めを検討中.

この記事はKeyball46で書きました.

*1:ルブ用なのでキットと直接関係はしない

VSCodeのテーマをいじってみる

この記事を読んで出来ること

  • VSCode のテーマが変えられる

カラーテーマ選択

Ctrl+K Ctrl+T でカラーテーマ選択

さらに変えたい

色々変えられる

ちなみに以下は私自身の設定.カラーテーマはDark+.

  //色設定
  "workbench.colorCustomizations": {
    //エディタの背景色
    "editor.background": "#000000",
    //アクティビティバーの背景色
    "activityBar.background": "#303030",
    //通知領域の背景色
    "notifications.background": "#490043",
    //エディタカーソルの背景色
    "editor.selectionBackground": "#660000",
    //現在の選択範囲と同じテキストをハイライト表示
    "editor.selectionHighlightBackground": "#303030",
    // 制御文字列(タブなど)を含め半角空白の色
    "editorWhitespace.foreground": "#757575",
    //アクティブなタブの背景
    "tab.activeBackground": "#00435d",
    "activityBar.activeBackground": "#00435d",
    "list.activeSelectionBackground": "#0086f3",
    "list.inactiveSelectionBackground": "#0086f3",
    //ステータスバー(下部)の背景色と文字色
    "statusBar.background": "#08334e",
    "statusBar.noFolderBackground": "#303030",
    "statusBar.foreground": "#aaa",
    "statusBar.noFolderForeground": "#aaa",
    //---border関連---//
    //ドロップダウンの下線
    "dropdown.border": "#7c7c7c",
    //通知領域の境界線
    "notificationCenter.border": "#d600c4",
    "notificationToast.border": "#d600c4",
    //その他色々の境界線
    "activityBar.border": "#2caaff",
    "sideBar.border": "#2caaff",
    "editorGroup.border": "#2caaff",
    "editorGroupHeader.tabsBorder": "#2caaff",
    "tab.border": "#2caaff",
    "statusBar.border": "#2caaff",
    "tab.activeBorder": "#2caaff",
    "panel.border": "#2caaff",
    "titleBar.border": "#2caaff",
    "menu.border": "#2caaff",
    "contrastBorder": "#2caaff",
    "editorHoverWidget.border": "#2caaff",
    "checkbox.border": "#2caaff",
    "input.border": "#2caaff",
    "statusBar.noFolderBorder": "#2caaff",
    "tab.activeBorderTop":"#2caaff",
  },
  //コメントの設定
  "editor.tokenColorCustomizations": {
    "comments": {
      "foreground": "#aaa",
      "fontStyle": "italic"
    },
  },
  //選択範囲の角を丸めない
  "editor.roundedSelection": false,

もっともっと変えたい

公式文書(英語) Theme Color | Visual Studio Code Extension API

upLaTeX で 日本語多書体化

この記事を読んでできること

  • upLaTeX を用いて,文書内に複数の日本語フォントを使えるようにする

  • 複数と言っても,7種類まで

  • 210202追記 一部だけ欧文フォントも置換する方法

最初に結論

多書体化したいファイルのプリアンブルに,以下を追加.

%%% 日本語フォントの設定・追加%%%
\usepackage[deluxe]{otf}
\usepackage[noalphabet]{pxchfon}          % 欧文フォントは置換対象外に
\setlightminchofont{yumin.ttf}            % \mcfamily\ltseries に割当
\setmediumminchofont{msmincho.ttc}        % \mcfamily\mdseries に割当
\setboldminchofont{ipaexm.ttf}            % \mcfamily\bfseries に割当
\setmediumgothicfont{YuGothR.ttc}         % \gtfamily\mdseries に割当
\setboldgothicfont{meiryo.ttc}            % \gtfamily\bfseries に割当
\setxboldgothicfont{ipaexg.ttf}           % \gtfamily\ebseries に割当
\setmarugothicfont{UDDigiKyokashoN-R.ttc} % \mgfamily に割当
  • うまくいかない場合
    1. \texlive\texmf-localに,使用したいフォントを置く
    2. コマンドプロンプトを立ち上げ, コマンド mktexlsr を実行する

出力例

\documentclass[dvipdfmx,a4paper,uplatex]{jsarticle}

\usepackage[deluxe]{otf}
\usepackage[noalphabet]{pxchfon}          % 欧文フォントは置換対象外に
\setlightminchofont{yumin.ttf}            % \mcfamily\ltseries に割当
\setmediumminchofont{msmincho.ttc}        % \mcfamily\mdseries に割当
\setboldminchofont{ipaexm.ttf}            % \mcfamily\bfseries に割当
\setmediumgothicfont{YuGothR.ttc}         % \gtfamily\mdseries に割当
\setboldgothicfont{meiryo.ttc}            % \gtfamily\bfseries に割当
\setxboldgothicfont{ipaexg.ttf}           % \gtfamily\ebseries に割当
\setmarugothicfont{UDDigiKyokashoN-R.ttc} % \mgfamily に割当

\begin{document}
\begin{itemize}
  \mcfamily\ltseries
  \item[游明朝] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \mcfamily\mdseries
  \item[MS明朝] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \mcfamily\bfseries
  \item[IPAex明] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \gtfamily\mdseries
  \item[游ゴ] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \gtfamily\bfseries
  \item[メイリオ] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \gtfamily\ebseries
  \item[IPAexゴ] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
  
  \mgfamily
  \item[UDデ教] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
\end{itemize}
\end{document}

これをコンパイルすると

f:id:fal_math:20210127121214j:plain
pxchfon パッケージのnoalphabet オプション

注意すべき点

  • \mcfamily\bfseries(今回はIPAex明朝)ではアルファベットが太字体
  • \gtfamily\mdseries(今回は游ゴシック)ではアルファベットが細字体
  • \section のフォントは\gtfamily\mdseries
  • \title , \author のフォントは \mcfamily\mdseries

\sectionのフォントも変えたい

以下をプリアンブルに追加すれば\gtfamily\bfseriesのフォントになる. (otfパッケージを読み込んだ後に記入 )

\renewcommand{\headfont}{\gtfamily\bfseries}

\title , \author のフォントも変えたい

以下をプリアンブルに追加すれば\mgfamilyのフォントになる.

\makeatletter
\renewcommand{\title}[1]{\gdef\@title{\mgfamily#1}}
\renewcommand{\author}[1]{\gdef\@author{\mgfamily#1}}
\renewcommand{\date}[1]{\gdef\@date{\mgfamily#1}}
\makeatother

noalphabet オプションについて

先程のソースから,\usepackage[noalphabet]{pxchfon}のオプションを外し \usepackage{pxchfon}とすると

f:id:fal_math:20210127120938j:plain
pxchfon パッケージのalphabet オプション
となる.アルファベット部分のフォントも変わっていることがわかる.

一部のフォントだけ、alphabetも和文フォントに合わせたい

あまり需要ないと思うが,タイトルやセクションで使いたくなることがあるかもしれない.

\userelfont\selectfont というコマンドが用意されているので,用いれば良い.

\begin{itemize}
  \gtfamily\mdseries
  \item[游ゴ] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
    
  \gtfamily\mdseries
  \item[游ゴ] {\userelfont\selectfont 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)}
  
  \gtfamily\bfseries
  \item[メイリオ] 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)
    
  \gtfamily\bfseries
  \item[メイリオ] {\userelfont\selectfont 吾輩は猫である.ギンガムチェック.Pen pineapple apple.(カッコ)(カッコ)}
\end{itemize}

これをコンパイルすると以下のようになる.

f:id:fal_math:20210202104540j:plain
\userelfont\selectfont

参考

(u)pLaTeXでもjlreqクラスで多書体化したい · GitHub

PXchfon パッケージ ~pLaTeX文書のフォントを簡単に変更~ [電脳世界の奥底にて]

使用書体の変更(upLaTeX 編) — Re:VIEW knowledge ドキュメント

(中高)数学問題の入手方法まとめ

忘れがちなので、備忘録的な記事を作ります。 無料で十分使えるものばかりです。

1 大学入試レベル

2 高校在学・定期テストレベル

3 高校入試レベル

4 中学在学・定期テストレベル

5 その他

更新履歴

  • 2021/03/04 「ホクソム」を追加
  • 2021/01/20 「大学入試数学の問題」を追加
  • 2021/01/19 記事を公開