BibTeXで複数著者を省略(et al.)する方法

BibTeX で複数の著者がいる場合は,省略して et al. と表記する方法です

著者名を省略すると文献リストが短くなります.ページ数が制限されている場合に使われる常套テクニックなので,ここに手順をメモしておきます.

概要

TeXBibTeXを使うと,文献データを列挙したファイルから, bstファイルに書かれたルールで文献情報を自動生成して,本文中に文献リストが生成されます

つまり bstファイルに,複数著者を省略(et al.)するルール(マクロ)を仕込めば,著者が多すぎる場合は自動的に et al. に置き換える,という処理が実現できます.

手順1) TeXソースコードの確認

TeXソースコードから,文献リストを作っている箇所を探します

例えば

\bibliographystyle{junsrt}
\bibliography{文献リストのファイル名}

と書いてある場合は bstファイルとして junsrt.bst を使っています

別の場合,例えば

\bibliographystyle{unsrt}
\bibliography{文献リストのファイル名}

であれば unsrt.bst です

手順2) bst ファイルを探す

TeX環境にインストールされている bst ファイルを探します

find / -name junsrt.bst

私は macOS で texlive2022 を使っていますが, junsrt.bst は以下の場所にありました

/usr/local/texlive/2022basic/texmf-dist/pbibtex/bst/junsrt.bst

これをTeXソースコードと同じディレクトリに junsrt85.bst という名前でコピーします

cp /usr/local/texlive/2022basic/texmf-dist/pbibtex/bst/junsrt.bst  junsrt85.bst

手順3) bstファイルの修正

コピーした junsrt85.bst を編集します

--- junsrt85.bst	2023-01-13 22:50:58.568059009 +0900
+++ junsrt85.bst	2023-01-13 22:54:15.879323528 +0900
@@ -247,7 +247,16 @@
       if$

       nameptr #1 >
-	{ namesleft #1 >
+	{
+          nameptr #3
+          #1 + =
+          numnames #5
+          > and
+            { "others" 't :=
+              #1 'namesleft := }
+            'skip$
+          if$
+          namesleft #1 >

 	    {", " * t * }

手順4) bstファイルの切り替え

最後に,TeXソースコードを編集します

junsrt85.bst を使うように \bibliographystyle で junsrt85 を指定します

\bibliographystyle{junsrt85} 
\bibliography{文献リストのファイル名}

これで再コンパイルすれば 自動で et al 表示に切り替わります

Amazon S3 へのアップロードを高速化する方法

AmazonのS3にファイルをアップロードする際に役立つ,高速化のTipsです

aws コマンド(CLI)を使う

CLIが一番軽量・高速です

サブコマンドは cp よりも sync の方が良い

cp よりもsyncの方が高速になります.scpの代わりに rsync を使うのと同じ理由です

cd [コピー元ディレクトリ]
aws s3  sync   .    s3:[コピー先]/

awsコマンドを複数同時起動する

公式FAQに「ファイル転送が遅かったら,awsコマンドを複数同時起動せよ」と書いてあります


aws s3 sync には,rsyncのようにファイル名に対するパターンマッチで転送するファイルを選択する機能があります(フィルタリング機能).

この機能を使って

  • ファイル名の先頭が"0"で始まるファイルだけを sync
  • ファイル名の先頭が"1"で始まるファイルだけを sync

という感じで複数のsyncコマンドを同時に並列起動します


具体的には

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '1*'
 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '2*'

という感じで, --exclude "*" で一旦全てのファイルをsync対象外にしてから --include で先頭が1で始まるファイルのみをsync対象にします


オプションは複数回指定できます.例えば,先頭の数字が,偶数と奇数で,2並列でsyncを実行する場合は

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '1*' --include '3*' --include '5*' --include '7*' --include '9*'

 aws s3 sync  .  s3:[コピー先]/  --exclude '*' --include '0*' --include '2*' --include '4*' --include '6*'  --include '8*' 

を実行すれば良いことになります


また念の為,最後に

 aws s3 sync  .  s3:[コピー先]/   

を実行しておけば,コピーし忘れのファイルだけを差分コピーできます

動作パラメータをチューニングする

awsの動作パラメータを変更することでさらに高速化が可能です

関連するパラメータは以下の通り

  • 同時接続数 (デフォルト値: 10)
  • ネットワーク帯域 (デフォルト値:無制限)
aws configure set default.s3.max_concurrent_requrests 20
aws configure set default.s3.max_bandwidth 1000MB/s

原理上は,(同時接続数 * ネットワーク帯域)の帯域が必要になります


基本的に aws s3 コマンドを使うような環境は,メモリやCPUは潤沢に利用できるはずなので,ボトルネックはネットワーク帯域になります.利用可能なネットワーク帯域に応じてこれらパラメータをチューニングしましょう

動作パラメータを確認する

awsコマンドの動作パラメータは設定ファイルに保存されています


設定ファイルのパスは

です