個人的にあると便利なマクロや細かい設定の備忘録.記事一覧



大きなアスタリスク* \bigast の作り方

数学記号や文字を,\bigplus や \sum と同じように使いたいときがある.
日本語で解説しているページが見つからなかったので,備忘録として残すことにした.
英語のページはこちら.
How to create my own math operator with limits? - TeX - LaTeX Stack Exchange

ソース

\usepackage{graphicx}
\usepackage{calc}

\newcommand{\bigast}{
  \mathop{
    \vphantom{\bigoplus} 
    \mathchoice
      {\vcenter{\hbox{\resizebox{\widthof{$\displaystyle\bigoplus$}}{!}{$\ast$}}}}
      {\vcenter{\hbox{\resizebox{\widthof{$\bigoplus$}}{!}{$\ast$}}}}
      {\vcenter{\hbox{\resizebox{\widthof{$\scriptstyle\oplus$}}{!}{$\ast$}}}}
      {\vcenter{\hbox{\resizebox{\widthof{$\scriptscriptstyle\oplus$}}{!}{$\ast$}}}}
  }\displaylimits 
}

とやっとけば,\bigast で \ast が \bigoplus のように出力されます.
※私のPCだと,pdflatex だと上手くいかず dvi を経由しないといけないようです.

命令文の雑な解説

外側から順にいく.

\mathop{ }\displaylimits

余白調節系.{ }内を math operator として出すやつ.今回は \bigoplus と同じようなものを作りたいから,\mathop を使った.\otimes みたいなのを出すなら,\mathbin とかを使う.詳しくは
LaTeX 数式の縦/横の調整(Kodama's tips page)
を参照.後ろについている \displaylimits は添え字の付き方を指定している.他にも,\limits と \nolimits があるぞ!
(例えば,\sum と \int はディスプレイでの添え字の付き方が違う)

\vphantom{ }

余白調節系.{ }内の文字と同じ高さの空白を作る.幅は無視される.

\mathchoice{ }{ }{ }{ }

実のところ,これが面白くて今回記事を書いた.場所ごとに出力を指定できる.\mathchoice{ディスプレイ}{テキスト}{スクリプト}{スクリプトスクリプト}
の順番なので,それぞれに \bigoplus と同じように \ast を出すように命令を書く.例えば,

\newcommand{\hoge}{\mathchoice{a}{b}{c}{d}}

とすれば,場所によって,\hoge でa,b,c,dがそれぞれ出力される.

\vcenter{\hbox{ }}

正直よくわかってない.\vcenterは{ }内の垂直方向の中心が中心になるように出力してくれる,が内側に \hbox を入れないと 水平方向の余白がおかしくなる.例えば,

$\vcenter{\hbox{$\frac{a}{\frac{b}{c}}$}}=\frac{a}{\frac{b}{c}}$

とやると伝わるはず.

\resizebox{ }{ }{ }

graphicx.sty を使用.大きさを変える. \resizebox{幅}{高さ}{出力したいもの} の順.幅もしくは高さを指定したくないとき(片方決まれば残りも決まる)は ! を指定する.

\widthof{ }

calc.sty を使用.{ }内の幅.calc.styを使いたくない場合は,直接○○ptとかcmとかやれば良さそう.

日本語で proof 環境を使うときのアレコレ

日本語でTeXを使うと,面倒なことが多々ある.

amsthm を使うと,proof 環境が使えるわけだけど,
\textit{Proof.} で表示される部分を,\textbf{(証明) }にしてえな
と思う人もいると思う.

\renewcommand{\proofname}{(証明)}

という命令で,

Proof.

(証明).

に置き換わる訳だけど,
イタリック体とピリオドが残ってしまう.
proof 環境のもう少し深く潜る必要がある訳だ.
一応,次のやつで解決した.

\usepackage{amsthm}

\makeatletter
\renewenvironment{proof}[1][\proofname]{\par
  \normalfont
  \topsep6\p@\@plus6\p@ \trivlist
  \item[\hskip\labelsep{\bfseries #1}\@addpunct{\bfseries}]\ignorespaces
}{%
  \popQED\endtrivlist\@endpefalse
}
\renewcommand{\proofname}{(証明)}
\makeatother

TeXの論文校正で color.sty を使うと,最後に消すのが面倒だ

タイトルの通りです.マクロが満たすべきは次の条件:

  1. 「置換」で消せる,色を変えられる
  2. 数式モードでも大丈夫
  3. 他の命令とケンカしない

いつも困ることは,最後の}を消すのが面倒なこと.
そこで,順番を逆にした.

\usepackage{color}

\newcommand\mycolor[2]{\textcolor{#2}{#1}}


消すときは,

  1. \mycolor{
  2. }{red}

の2つを検索すればよいです.

itemize 環境における余白の調節

TeXで書類を書くとき,いつもスペースが足りなくて困ったりする.
申請者のための itemize 環境周辺のテンプレ

% \vspace{-0.5\baselineskip}           %3. 上の余白
{
\setlength{\leftmargini}{27pt}         %1. 左の余白

\begin{itemize}
	\setlength{\itemsep}{5pt}      %2. ブロック間の余白
	\setlength{\parskip}{0pt}      %4. 段落間余白.
	\setlength{\itemindent}{0pt}   %5. 最初のインデント
	\setlength{\labelsep}{5pt}     %6. item と文字の間
\item[hogehoge]
\item

\end{itemize}
}
% \vspace{-0.5\baselineskip}           %3. 下の余白

いい加減な説明をいくつか書く.
(※ 単位を pt でやってるけど,もっと適切なのがあるかも.)

\item で生成される item に続く文章を「ブロック」と呼ぶことにする.

  1. \leftmargini で「左余白」を調節する.
    • マイナス値も可能.
    • この値でブロック丸ごと動くため,まずこれを設定する.左余白を節約できるので重宝する.
    • { } で囲むことで,\leftmargini の影響を{ }の中だけにするため.各 itemize ごとに余白を調節することが出来る.
  2. \itemsep をいじると「ブロック間の余白」が動く.
    • 上下のスペース確保に使う.
    • ブロック間の余白 = \itemsep + \parskip ?.
  3. 最初と最後の \vspace で 「itemize の上下の余白」を調節する.
    • マイナス値で余白を節約できる.
  4. \parskip をいじると,「ブロック内での段落間の余白」が変わる.
    • 上に書いたように「ブロック間の余白」にも影響が出る.使ったことなし.
  5. \itemindent を大きくすると,各ブロックの最初の indent が変わる.
    • 大きくすれば,文字が右に移動し,item は文字に付いていく.
    • item が大きくてはみ出すときに使うかもしれない.
    • item は右寄せなので,大きな item と小さな item があるときは注意.
  6. \labelskip をいじると,各ブロックの最初の「item と 文字の間の余白」が変わる.ここを大きくすると item が(!)左に動く.


とりあえずこれで自分は不便はしてない.1~4の調整で普通は事足りるのではないだろうか.

余談ですが,itemize 環境では \item[hogehoge] とすると,hogehoge を item に出来ますね.

WinShell の初期設定と inverse search のメモ

エディタは WinShell が好きなのだけれど,日本語の文字化けとかが
いろいろと面倒で,パソコンを変える度に一苦労するので記事にしておく.
ちなみに,WinShell は現在非推奨らしいです.

日本語を使うときは,UTF-8は文字化けするので,Shift-JIS を使う.
pdflatex を実行して,ランタイムエラー?が起きるときは,dvipdfmx を使うとよい.
つまり,tex -> dvi -> pdf という伝統(?)の2ステップコンパイルにする.


pdflatex

exeファイル   C:\w32tex\bin\dvipdfmx.exe (もちろん人による)

コマンドライン  "%s.dvi"

ビュアーは SumatraPDF が良い.
開いたままでも上書きできるし,ダブルクリックするとソースファイルに飛べる(inverse search)

SumatraPDF は賢いので勝手に逆順検索の設定をしてくれるが,ダブルクリックしても
ソースに飛べないことがある.
四苦八苦したところ,synctex ファイルがないのが問題ということが判明した.
synctex ファイルは,大雑把にいうと,pdf ファイルと tex ファイルを繋ぐ橋のようなもので,
作成するには,コマンドラインをいじればよい.

今回は,pdflatex のパートでは,dvi -> pdf を行っているので,latex のパートで
synctex ファイルを作ってもらうことにした.


latex

コマンドライン  -src-specials -interaction=nonstopmode -synctex=-1 "%s.tex"


(そのうちもう少し校正するかも)