- LaTeXデフォルトのベクトルの矢印が短い
- \usepackage[e]{esvect} を使う
- 画像ファイル名に複数のピリオドがあるとincludegraphicsがエラー
- \usepackage{grffile} を入れる
- 複数行にわたる下線を入れる
- \usepackage{jumoline}を使う. \setlength{\UnderlineDepth}{2.6pt} とするとよい.
\def\ul#1{\Underline{#1}} として定義しておく
- 上の\ulで, \ul{...}の中に数式番号の参照があるとLaTeXがエラー
- \eqref部分を {} で囲う (例: ほげほげ{\eqref{eqn:foo}}.)
- Indexで参照が see になってしまう
- \renewcommand{\seename}{→}
- 「マス」を表す\boxslashを使いたい
- \usepackage{stmaryrd} を入れる
- \begin{cases}..\end{cases}だと括弧の大きさが変
- \usepackage{empheq}してから, 以下のように wrap, wrap* 環境を定義する
\newenvironment{wrap}%
{\empheq[left={\empheqlbrace\,}]{align}}{\endempheq}
\newenvironment{wrap*}%
{\empheq[left={\empheqlbrace\,}]{align*}}{\endempheq}
- 分数の真ん中の線が短すぎる
- 次のようにして \frac を再定義
\makeatletter
\let\originalfrac=\frac
\DeclareRobustCommand{\ffrac}[2]{%
\originalfrac{\kern1.5pt{#1}\kern1.5pt}{\kern1.5pt{#2}\kern1.5pt}}
\let\frac=\ffrac
\makeatother
- minipageの中で \vv がエラー, 図のcaptionの中で \vv がエラー
- $\protect\vv{..}$ とする. \protect$\vv{..}$ は無意味.
- \captionの中で\footnotemarkがエラー
- 同様に{\protect\footnotemark}のようにする.
- 表のセルの中で改行を行いたい
- \parboxを使う. \parbox[c]{幅}{\noindent ...} で幅指定のboxが作れる.
改行幅が大きいので調整し, 箱の上下に余裕を持たせるために, さらに次のように指定する.
\parbox[c]{5em}{\baselineskip=0.7\baselineskip\rule{0pt}{1.1em}\noindent
That is a very long paragraph.%
\rule[-7pt]{0pt}{1em}}
次のように, \cellboxを定義しておくと便利.
\def\cellbox#1#2{%
\parbox[c]{#1}{\baselineskip=0.7\baselineskip\rule{0pt}{1.1em}\noindent
#2\rule[-7pt]{0pt}{1em}}}
- 画像などにグラデーションのかかった影を落とす&
その際に周りの余計なスペースを0にする
- psblurboxを使う. PSTricksを使っているため, 基本的にdvipsでないと動かないはずだが,
zrbabbler氏作の bxdpx-pstricks.sty を使うとdvipdfmxでも使える.
(https://zrbabbler.hatenablog.com/entry/20140712/1405179775)
次のようにする.
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{bxdpx-pstricks}
\usepackage{pst-blur}
\psblurbox*[framesep=0pt]{\includegraphics{hogehoge}}
本来的な解決はTikzのpgf-blurを使うことだが.. .
- \ddots, \vdotsなど…系の省略の大きさが変更できない
- \usepackage{mathdots}を入れる. ドキュメントはこちら.
- \vdotsの点を4つにしたい
- 次のように\:を定義
\def\:{\parbox[c]{.5ex}{:\\[-2ex]:}}
- 段落の入ったboxを\fbox, \shadowboxなどで囲えない
- \usepackage{cprotect}してから, \cprotect\shadowbox{..} のようにする.
verbatim環境を入れたい場合は, \usepackage{verbatimbox}してから
\begin{verbbox}..\end{verbbox} とする.
- 図を垂直方向に中心に配置したい (表の中など)
- \usepackage{graphbox} を入れておくと, \includegraphics[align=c]
というオプションが使える
- \usepackage{diagbox}すると, 図の挿入がエラー
- diagboxが依存しているpict2eがドライバ依存なので, 文書全体のプレアンブルに
\documentclass[..,dvipdfmx]{jbook} のように dvipdfmx を追加.
- algorithm環境のキャプションで, 上にも線が入るのがうざい
- これは @algocf@pre@ruled で定義されているので, 次のようにして{}に定義する.
\makeatletter
\def\@algocf@pre@ruled{}
\makeatother
- algorithm環境 (algorithm2e)で, キャプションのフォントを小さくする.
また, 下に少し空白を空ける.
- 次のように定義する.
\SetAlCapFnt{\small}
\SetAlCapNameFnt{\small}
\SetAlgorithmName{アルゴリズム\rule[-3pt]{0pt}{1ex}}{アルゴリズム}{アルゴリズムの一覧}
- algorithm環境で, コメントの頭を揃えたい.
- \eqparbox{}を使う解法だと, 頭が揃わない右揃えになってしまう.
\usepackage{algorithmic}の代わりに \usepackage[noend]{algcompatible} としてから,
次のように定義する. 使う際は, \FORの場合も常に \COMMENT{ほげ} とする.
\renewcommand{\COMMENT}[2][.5\linewidth]{%
\leavevmode\hfill\makebox[#1][l]{(*~#2~*)}}
- Box中などで \footnotemark..\footnotetext を使う場合, 複数入れると番号がずれる
- 次のように定義して, \fnm, \fnt を使う
\newcounter{footnotemarknum}
\newcommand{\fnm}{\addtocounter{footnotemarknum}{1}\footnotemark}
\newcommand{\fnt}[1]{
\addtocounter{footnote}{-\value{footnotemarknum}}
\addtocounter{footnote}{1}
\footnotetext{#1}
\setcounter{footnotemarknum}{0}
}
使い方: \footnote{text1} \fnm \fnm .. \fnt{text2} \fnt{text3}
こうして, 通常の \footnote と併用もできる.
- 索引をあかさたな順に分けたい
- % mendex -d mendex.dic -s mendex.isty -g textmodel.idx でmendexのスタイルファイル
mendex.isty が読み込めるので, 中に下のように書いておく. -g はあいうえおではなく,
あかさたな順にするオプション.
symbol_flag 0 # 最初に "Symbols" を置かない (効かなかった)
letter_head 2 # カタカナではなく, ひらがなで分ける
lethead_flag 1 # 索引を頭文字で分ける
lethead_prefix "{\\bf " # 頭文字をボールドにする
lethead_suffix "}" # 同様
symhead_positive "記号, 数字" # "Symbols"を"記号, 数字"にする
TUGのmendexのマニュアルはこちら.
- 「公式の一覧」のように独自の一覧を作りたい.
- パッケージtocloftを使って, 次のように指定する. 数式の中なので, \parがあるとエラー.
\newcommand{\listformulaname}{\huge\bf 公式の一覧}
\newlistof{formulae}{equ}{\listformulaname}
\newcommand{\formula}[1]{%
\text{({\bf #1})}%
\addcontentsline{equ}{formulae}{\protect\numberline{(\theequation)}~#1}
}
\setlength{\cftformulaenumwidth}{3em}
こうしてから, align環境の第3引数を使って & & \formula{プハの公式} のように指定する.
そのままでは Command \c@lofdepth already defined. と怒られるので,
\usepackage[subfigure]{tocloft} として[subfigure]を入れてtocloftをロードする.
- 反対を表すとき, \leftrightarrowは短すぎるし,
\longleftrightarrowは長すぎる.
- extarrowsパッケージを読み込んで, 次のように定義する. 2exのところは調整可能.
raiseboxは和文の高さと合わせるためのもの.
\def\←→{\raisebox{0.3ex}{$\xleftrightarrow{\rule{2ex}{0pt}}$}}
- 行列の列間の空白を変えたい
- amsmathを使っている場合は pmatrix, bmatrix を使うことになるが,
\arraycolsep を変えればよい. 該当の \begin{align}などの中で指定してもよい.
{\arraycolsep=0pt
\begin{pmatrix}
...
\end{pmatrix}
}
- 数式内の要素を, 微妙に上下したい
- \raise2pt\theta などはエラーになる. \raise2pt\hbox{$\theta$} として
\hboxで囲むとうまく働くようになる (\raiseboxを使えば同じという話もあるが..).
- 表の中の表の垂直合わせ.
- tabularの中にtabularを入れると, 中身は基本的に中心合わせになる.
改行の調整等で基準線を下に合わせたい場合は, tabular中のtabularの方に
\begin{tabular}[b]{lll} などと[b]のように指定する.
- 脚注の長いURLで, 適度に改行を入れたい
- \usepackage{xurl}してから\url{http://...}で終わり..だが,
\usepackage{url}や\usepackage{xurl}が動かないことがあった.
こういう場合は, {\linebreak[4]}や{\linebreak[3]}などを適宜入れておくとよい.
\linebreak[4]はその場所で必ず改行する. 数(0〜4)が小さいほど, 制限が緩まる.
\linebreakを短く\defしておいてもよい.
- \Cvsとは?
- \sectionの定義等で使われている\Cvsは, 基準となる\baselineskipのこと, つまり
\normalsizeでの\baselineskipに等しい, とのこと.
(https://ftp.unpad.ac.id/ctan/macros/jptex/latex/platex/pldoc.pdfより)
- 章末の練習問題用などに新しいenumerateを定義したい
- enumitemパッケージをロードしてから, 次のようにして新しい環境 exercises を定義する.
後は \begin{exercises} \item .. \end{exercises} でよい. 数字はリストの最大の深さ.
\newlist{exercises}{enumerate}{1}
\setlist[exercises]{
itemsep=2pt,
label={[\thechapter--\arabic*]},
ref={\thechapter--\arabic*}
}
- 表の中で\parboxを使う場合
- そのままでは中心で揃うので, 改行の調整がうまくいかない. \parbox[b]{5zw}{...}
などとして, 下に揃える. \parboxのオプションには他に
\parbox[position][height][inner-pos]{width}{text} があり, 詳しくはTUGの
\parboxの解説
にある.
- 表で中央寄せ, かつ幅が固定のカラムを使いたい
- m{1zw}などは垂直方向にしか中央寄せできないので,
下記のようにして新しい指定子C,Wを定義して, {CCCC}のようにする.
Wの方はW{2zw}のようにして幅を適宜指定して使う. 参考: https://tex.stackexchange.com/questions/12703/how-to-create-fixed-width-table-columns-with-text-raggedright-centered-raggedlef
\usepackage{array}
\newcolumntype{C}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{4em}}
\newcolumntype{W}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
- 表で固定幅, かつ右寄せ(数字など)のカラムを使いたい
- 以下のようにして指定子Rを定義する. 右が揃う=左は揃わない,
なので\raggedleftなのに注意. R{2em}のようにして使う.
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
- \underbraceの下のテキストを\footnotesizeにしたい
- \underbrace{}_{\textstyle ..} とするのが定番だが,
これだと\normalsizeになってしまう. \footnotesizeにするには, \text{}で囲って
\underbrace{}_{\text{\footnotesize ..}} とする必要がある.
次のように \fnstyle を定義しておくと便利.
\def\fnstyle#1{\text{\footnotesize #1}}
- バックスラッシュ\をキャプションなどでタイプライター体で出せない
- \textbackslashとすると, たとえ\ttで囲っていても普通のフォントになってしまう.
Plain TeXの記法で, {\tt \char`\\} とすると出すことができる.
- latexmkで ".fdb_latexmk" といううざい名前のファイルができる
- latexmkは便利なツールですが, データベースファイルの上記の拡張子は目立ちすぎるため,
$fdb_ext = 'fdb';
を ~/.latexmkrc の中に入れておけば,
${target}.fdb にデータベースが構築されるようになる.
- $y$のように下に突き出た深さだけを潰したい
- $\smash[b]{y}$ とする. \smashは高さと深さの両方を0にするが, \smash[t]だと高さだけ,
\smash[b]だと深さだけを0にする.
- 数式を複数の位置で揃えたい.
- amsmathの alignat, または alignedat を使う.
\begin{aligned}{n} で, nは揃える数. &はこの2倍必要で,
"奇数個目の&でだけ揃う"点に注意. 偶数個目は説明などを入れるタブの機能があるが,
空白は入らない. 下の例を参照.
\begin{aligned}{3}
& p(\vz_1^N\|\balpha) &~
&&= \prod_{i=1}^N & \left[
\frac{\Gamma({\sum}_k\alpha_k)}{\Gamma(T_i\+{\sum}_k\alpha_k)}
\prod_{k=1}^K \frac{\Gamma(\alpha_k\+n(i,k))}{\Gamma(\alpha_k)}
\right]
\\
& p(\vw_1^N\|\vz_1^N,\bmeta) &~
&&= \prod_{k=1}^K & \left[
\frac{\Gamma(V\eta)}{\Gamma(V\eta+m(k))}
\prod_{v=1}^V \frac{\Gamma(\eta\+m(k,v))}{\Gamma(\eta)}
\right]
\end{aligned}
- 文献で, 指定した場所で改行可能にしたい
- /の場合は{\slash}とすればよいが, それ以外の場合は,
\hspace{0pt}をその場所に挿入する. \mbox{}は効かないので注意.
- TeX Live2020以降のLaTeXで, 表の中での\inputの後の\hlineがエラー
- 表の中身を\inputで外部ファイルにしたいことはよくあるが, TeX Live 2020以降では
\inputでファイルの中身を取り込んだ後にフックが実行されるため,
\hline のところでエラーが出てしまう.
これを解決するには, 次のようにして \einput を定義して使えばよいとのこと.
参照: https://tex.stackexchange.com/questions/583927/misplaced-noalign-error-with-input-in-a-table-after-the-2020-fall-latex-releas
\makeatletter
\let\einput\@@input
\makeatother
ただし, こうすると2020以前のLaTeXでは逆にエラーになってしまうため,
両方に対応するには \def\einput#1{\input{#1}} として,
コメントアウトで切り替えるようにする.