【IIS, APS.NET】aspxサイトが文字化けする【Windows10】
現象
Windows標準搭載のWebサーバーであるIISを起動し、ASP.NETで書かれたaspxファイルをブラウザで表示されると文字化けした。
aspxファイルの文字コードはUFT-8。
その場しのぎ
aspxファイルの文字コードを、UFT-8じゃなくてUTF-8 with BOMにする。
一応これで文字化けはしなくなるが...
解決(一応)
IISマネージャーを開いて、サイドバーから今作業している仮想ディレクトリ(とか)を選択。
「○○ホーム」が表示されたら、「.NET グローバリゼーション」というアイコンがあるので、ダブルクリックで開く。
「エンコード」の「ファイル」のところが、私の環境では(デフォルトでは?)shift_jis
になってたのでutf-8
にして、右側にある「適用」を押す。
そうしたら物理ディレクトリにweb.config
ファイルが生成される。
以上の作業の後、ブラウザでページを更新したら、文字化けが治った。
なぞ
文字化けが治った後、web.config
ファイルを削除したら、IIS上での設定の表示がshift_jis
に戻ったが、ブラウザでページを更新してももう文字化けの現象は再現できなかった。
意味がわからない。
上記手順と文字化けの因果関係は確かなものだと思うが、なにがなにやらわからん。
とりあえず、以上。
参考
固定IPの確認方法
「あなたの固定IPを教えてくれ」と言われたら、それは多分グローバルIPアドレスのことを聞かれているのだと思います。
グローバルIPアドレスはインターネットプロバイダから提供されるやつです。
グローバルIPアドレスは動的な場合もあるようですが、普通は固定IPです。
グローバルIPアドレスを確認するには、下記サイトへアクセスするのが最も簡単なようです:
JavaScriptでグローバルIPアドレスを取得して表示しているようです(ソースまでは確認していませんが)。
MacやWindowsの設定アプリやシステム情報からグローバルIPアドレスを確認する方法はわかりませんでした。
Macでいろいろと探しましたが、プライベートIPアドレスしか確認できませんでした。
以上です。
参考
固定IPと動的IPの解説が書かれています。
上のリンクもこのページから引っ張ってきました。
【Mac】Java開発の環境構築(JDK, Homebrew, VSCode)
HomebrewでopenJDKのバージョン11をインストールして、VSCodeでも使えるようにします。
環境
- 2022-04-26
- macOS Monterey v12.3.1
- Visual Studio Code: v1.62.3
- Extension Pack for Java: v0.21.0
Java開発の環境構築
Javaの開発環境を構築するには、JDKというコンパイラやその他もろもろがまとめられたモノをインストールすれば良い。
「JDK」自体は一般的な概念だが、実物としてはいろいろなところから提供されているらしい(OracleとかMicrosoftとか)。
JDKは提供元の各サイトのダウンロードページから入手することができるが、今回はHomebrewを使ってインストールすることにする。
まずはどんなJDKがHomebrewに登録されているか確認する。brew search
コマンドを実行してみる:
% brew search jdk ==> Formulae openjdk openjdk@11 openjdk@17 openjdk@8 jd mdk cdk ==> Casks adoptopenjdk microsoft-openjdk oracle-jdk-javadoc semeru-jdk-open jdk-mission-control oracle-jdk sapmachine-jdk
いろいろあるけど、今回はopenJDKのバージョン11をインストールしてみる。 下記コマンドを実行:
brew install openjdk@11
このパッケージは「keg-onlyなパッケージ」なので、シンボリックリンクは自動で作られない。 そのため、自分でシンボリックリンクを作るか、パスを通すなどをしなければならない。
ちなみに、macだと多分標準でjava
やjavac
が既にインストールされている。
% java --version java 13.0.2 2020-01-14 Java(TM) SE Runtime Environment (build 13.0.2+8) Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing) % javac --version javac 13.0.2
これからパスの設定をして、java
やjavac
と打ったときにちゃんと新しくインストールしたものに変更されているか確認する。
Homebrewからインストールしたopenjdk@11
に含まれているjava
コマンドなどは、以下のディレクトリに配置されている:
/usr/local/opt/openjdk@11/bin
そのため、このディレクトリにパスを通す。
使用しているシェルがzsh
の場合には、~/.zshrc
ファイルにパスを追加するためのコマンドを書けばいい。
bash
なら~/.bash_profile
に書く。
ターミナルから下記コマンドを実行すれば良い:
echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
既存パスの左側にopenjdk@11
へのパスを追加したので、これらのパスのうちに同じjava
というコマンドがあった場合にも、openjdk@11
にあるjava
コマンドが優先して呼ばれるはず。
シェルの設定ファイル再読み込みする:
source ~/.zshrc
そのあと、もう一度java
やjavac
コマンドを実行してみると、ちゃんとインストールしたバージョンが表示されていることが確認できる:
% java --version openjdk 11.0.15 2022-04-19 OpenJDK Runtime Environment Homebrew (build 11.0.15+0) OpenJDK 64-Bit Server VM Homebrew (build 11.0.15+0, mixed mode) % javac --version javac 11.0.15
which
コマンドでも確認できる:
% which java /usr/local/opt/openjdk@11/bin/java % which javac /usr/local/opt/openjdk@11/bin/javac
また、HomebrewでインストールしたJDKをシステム?に認識させるには、/Library/Java/JavaVirtualMachines/
以下にシンボリックリンクを作成する必要がある。
下記コマンドでシンボリックリンクを作成:
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
java_home
コマンドで、インストールされているJDKのバージョンを確認できる:
% /usr/libexec/java_home -V Matching Java Virtual Machines (2): 13.0.2 (x86_64) "Oracle Corporation" - "Java SE 13.0.2" /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home 11.0.15 (x86_64) "Homebrew" - "OpenJDK 11.0.15" /usr/local/Cellar/openjdk@11/11.0.15/libexec/openjdk.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home
バージョン11のHome
ディレクトリのパスだけがほしい場合は、次のようにして得られる:
% /usr/libexec/java_home -v 11 /usr/local/Cellar/openjdk@11/11.0.15/libexec/openjdk.jdk/Contents/Home
実行テスト
コンパイルと実行のテストをする。
カレントディレクトリに次の内容のファイルをTest.java
という名前で保存する:
public class Test { public static void main(String [] args) { System.out.println("Hello Java!!!!!!"); } }
javac
コマンドでコンパイル:
javac Test.java
すると、Test.class
というバイナリファイルが生成される。
% ls Test.class Test.java
最後に、java
コマンドでプログラムを実行する:
java Test
## -> Hello Java!!!!!!
ちゃんとテキストが表示されればok。
VSCodeで開発環境を構築
vscodeでJavaの拡張機能を入れれば、ボタンをポチポチするだけでプログラムを実行できるようになる。
vscodeの拡張機能検索窓にjava
と入れて、上の方に表示される「Extension Pack for Java」をインストールする。
次に、java_home
の設定を行う。
使いたいバージョンのjava_home
のパスをメモっておく。
パスはjava_home
コマンドで知ることができる:
% /usr/libexec/java_home -v 11 /usr/local/Cellar/openjdk@11/11.0.15/libexec/openjdk.jdk/Contents/Home
vscodeに戻って、cmd + ,
で設定を開く。
java.jdt.ls.java.home
と検索して表示される項目で、「settings.json で編集」というところをクリックする。
あるいは、普通にsettings.json
を開く。
一番外側にある括弧{ }
の中に、java home
を設定するコードを追加する。
{ }
内に既に何か書いてある場合は、カンマ,
で区切ってから追加する。
例えば、以下のような感じ:
"java.jdt.ls.java.home": "/usr/local/Cellar/openjdk@11/11.0.15/libexec/openjdk.jdk/Contents/Home",
再起動とかを勧められたら適宜行う。
以上で設定は完了。
テストをするには、さっきのTest.java
をvscodeで開いて、タブの右側にあるボタン▷
を押すか、main
メソッドの上に表示されている「Run」を押す。
そしたら、実行結果がエディタ内ターミナルに表示される。
このときに、ちゃんとjava home
を指定したバージョンのjava
が呼ばれていることを確認する。
以上!
疑問
よく環境変数$JAVA_HOME
を設定しましょうみたいな話があるが、やる意味あるのか疑問。
使いたいバージョンのjava
とjavac
コマンドがちゃんと呼ばれてたら十分だと思う。
$JAVA_HOME
を設定したとしても、vscodeのsettings.json
で改めて設定しないとそのバージョンのjava
は呼ばれないし、そもそも誰が$JAVA_HOME
なんていう変数を参照しているのか不明。
というわけで、環境変数$JAVA_HOME
を設定する意味はないかと思う。
参考
- https://openjdk.java.net
- https://qiita.com/gishi_yama/items/ee3526e7e7a922148333
- https://qiita.com/seri_k/items/e978c1339ce51f13e297
- https://zenn.dev/odentravel/books/c893bb0b7352f6/viewer/1aa99a
- https://xtech.nikkei.com/it/article/COLUMN/20060227/230812/
メモ
brew install openjdk@11
を実行したときに表示された指示書(?)。
For the system Java wrappers to find this JDK, symlink it with sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk openjdk@11 is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have openjdk@11 first in your PATH, run: echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc For compilers to find openjdk@11 you may need to set: export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"
CPPFLAGS
の設定はしていないけど、一応java
動いたし、やらんでいいのかな?
環境変数CPPFLAGS
の意味がよくわからんので、一応メモとして残しておく。
【Safari】倍速再生ができるようになる拡張機能(MacOS)
さて、macOSのSafariで倍速再生ができる拡張機能のご紹介です。
Speed Player for Safari
結局、これ以外ないんじゃないかな。
最新アプデが6ヶ月前ですが、一応動きます(Monterey, 2022.4.7)。
Accelerate for Safari
これもそういう機能のはずですが、インストールしても機能しませんでした(Monterey, 2022.4.7)。
アプデも4ヶ月止まっているようです。
おわりに
Speed Player for Safari以外で正しく機能する、倍速再生の拡張機能があったら教えて下さい。
あるいは、作ってください!(^o^)/
以上です。
【LaTeX】ファイルを分割してサブディレクトリに配置する
本記事の目的
大規模なtex文書をファイル分割することでQOL向上に努めた証の記録。
順を追って解説します。
環境・バージョン
タイプセットはlatexmk (uplatex + dvipdfmx)
コマンドで行います。
最後の方では、vscodeというエディタの拡張機能LaTeX Workshopを用いてタイプセットする方法も書いています。
素朴な方法
分割したtexファイルをsection01.tex
、section02.tex
とします。
これらをmaster.tex
で読み込んで、pdfファイルを作ります。
それぞれのファイルの中身は以下のような感じです。
%% master.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \begin{document} \input{section01.tex} \input{section02.tex} \end{document}
%% section01.tex \section{ひとつめ} ほげほげ
%% section02.tex \section{ふたつめ} ほげほげ2
分割したファイルsection01.tex
とsection02.tex
には、document
環境の中身だけを書きます。
master.tex
ファイル内で\input
コマンドを書いたところに、引数で与えたファイルの内容がそのまま挿入されます。
つまり、master.tex
ファイルをタイプセットすれば、全ての内容を含んだ文書が完成するわけです。
しかし、この方法では、分割したファイルを単体でタイプセットすることができません。
分割したファイルにはdocument
環境の中身しか書いていないので、tex文書としては不完全であるからです。
この不満点は、docmute
パッケージを用いることで解決できます。
docmuteパッケージ
docmute
パッケージを用いると、\input
で分割ファイルを挿入する際に、document
環境内のみを抽出して読み込んでくれます。
(正確には、document
環境を改造して、入れ子になったdocument
環境やプリアンブルを無視するようにしている。)
例えば、次のようにして使います。
%% master.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{docmute} \begin{document} \input{section01.tex} \input{section02.tex} \end{document}
%% section01.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{docmute} \begin{document} \section{ひとつめ} ほげほげ \end{document}
%% section02.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{docmute} \begin{document} \section{ふたつめ} ほげほげ2 \end{document}
このとき、分割したtexファイルは、単体でもタイプセットを行うことができます。
さらに、master.tex
もそのままタイプセットができます。
分割ファイルで、目次や文献の出力を行う
せっかく、分割したファイルを単体でタイプセットできるようになったので、その場で目次や文献の出力の確認も行いたいところです。
いくつか方法は思いつきますが、例えば、シンプルにif文を使って、今タイプセットしているファイルが分割ファイルかmaster.tex
なのか判定して処理しましょう。
プリアンブルは各ファイルで共有したいので、mymacro.sty
ファイルを作って読み込むことにします。
%% ディレクトリ構造 / |- mymacro.sty |- mybib.bib |- master.tex |- section01.tex `- section02.tex
%% mymacro.sty \newif\ifsubfile \newcommand\mokuji{ \ifsubfile \tableofcontents \clearpage \else \relax \fi } \newcommand\bunken{ \ifsubfile \clearpage \bibliographystyle{junsrt} \bibliography{mybib} \else \relax \fi }
%% mybib.bib @book{hoge2022, title = {ほげほげ}, author = {ほげ星人}, year = {2022} }
%% master.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{docmute} \usepackage{mymacro} \begin{document} %% 目次 \tableofcontents %% 本文 \input{section01.tex} \input{section02.tex} %% 文献 \bibliographystyle{junsrt} \bibliography{mybib} \end{document}
%% section01.tex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{mymacro} \subfiletrue \begin{document} %% 目次 \mokuji \section{ひとつめ} ほげほげ\cite{hoge2022}. %% 文献 \bunken \end{document}
分割したtexファイルでは\subfiletrue
と書いてあるので、\ifsubfile
がtrue
になります。
master.tex
をタイプセットするときには、それはfalse
なので、\mokuji
と\bunken
は何もしないコマンド(\relax
)になります。
分割ファイルをサブディレクトリに入れる
分割したファイルが多くなってくると、サブディレクトリに格納したくなります。
texファイルなどをサブディレクトリに配置すると、パスの設定をちゃんとしないといけなくなります。
ここでは、以下のようなディレクトリ構造にしてみます:
/ |- .vscode/settings.json |- fonts/ | `- フォントファイル |- sty/ | `- mymacro.sty |- sections/ | |- 01.tex | `- 02.tex |- latexmkrc |- master.tex `- mybib.bib
まず、latexmk
の設定ファイルであるlatexmkrc
ファイルには、以下のように書きます:
#!/usr/bin/env perl ## latexコマンドの共通オプション $latex_options = '-synctex=1 -halt-on-error -file-line-error -interaction=nonstopmode'; if ($^O eq 'MSWin32') { # Windows の場合 $latex = "uplatex %O $latex_options -kanji=utf8 -no-guess-input-enc %P"; } else { # Windows以外のOSの場合(Linux, macOS) $latex = "uplatex %O $latex_options %P"; } $lualatex = "lualatex %O $latex_options %S"; $biber = "biber %O --bblencoding=utf8 -u -U --output_safechars %B"; $bibtex = "pbibtex %O %B"; $makeindex = "upmendex %O -o %D %S"; $dvipdf = "dvipdfmx %O -o %D %S"; ## latexコマンドの最大実行回数 $max_repeat = 5; ## $dvipdfを利用して.dviからPDFを作成 $pdf_mode = 3; ## specifies cleanup mode ## dvi, ps, pdfファイル以外を削除 $cleanup_mode = 2; ## -c optionで消すファイルの拡張子 $clean_ext = "bbl dvi"; ## show CPU time used $show_time = 1; ## パスの設定 - - - - - - - - - - - - - - - - - - - - - ## ルートディレクトリを探して登録 $key_file = 'master.tex'; if (-e $key_file) { $root_dir = '.'; } elsif (-e '../' . $key_file) { $root_dir = '..'; } ## styやfontを探索するパスを追加 if ($root_dir){ $ENV{'TEXINPUTS'} = $root_dir . '/;' . $root_dir . '/sty//;'; $ENV{'OPENTYPEFONTS'} = $root_dir . '/fonts//;'; }
前半部分は好きに書いて下さい。後半部分でパスの設定をしています。
分割したtexファイルの配置場所を変えたので、master.tex
の内容も少し修正します:
%% 修正前 \input{section01.tex} \input{section02.tex} %% 修正後 \input{sections/01.tex} \input{sections/02.tex}
ここで、sections/01.tex
には、上のsection01.tex
の内容をそのままコピペして下さい。02
の方も同じです。
サブディレクトリに配置したtexファイルから見て、bibファイルの相対位置が変わったので、\bunken
マクロを少し修正します。
\newcommand\bunken{ \ifsubfile \clearpage \bibliographystyle{junsrt} %% \bibliography{mybib} % 修正前 \bibliography{../mybib} % 修正後 \else \relax \fi }
他のファイルは、上で作ったそのままで良いです。
master.tex
をタイプセットするには、それと同じディレクトリに移動して
latexmk master.tex
と打ちます。
分割したセクションのtexファイルをタイプセットするには、sections
ディレクトリに移動してから
latexmk -r ../latexmkrc 01.tex
と打ちます。設定ファイルをオプションで直接指定しています(面倒ですが)。
vscodeでタイプセットするには、.vscode/settings.json
に以下の設定を書きます:
{ "latex-workshop.latex.tools": [ { "name": "Latexmk for sub dir", "command": "latexmk", "args": [ "-e", "read_first_rc_file_in_list( '../latexmkrc' );", "%DOC%" ] }, ], "latex-workshop.latex.recipes": [ { "name": "MASTER", "tools": [ "Latexmk for sub dir" ] }, ] }
↑を書いたら、vscodeを再起動します。(作業ディレクトリを開き直す)
そうしたら、master.tex
やsections/01.tex
などを開いて、サイドバーの「TeX」から「Build LaTeX project」の「Recipe: MASTER」をクリックすれば、タイプセットができるはずです。
また、サブディレクトリのsections/
内のtexファイルで、\includegraphics
コマンドなどを使う場合には、挿入する画像や図のファイルのパスは、master.tex
ファイルから見た相対パスを書けばよいです。
以上、説明が冗長な割にクソわかりにくいかと思いますが、とりあえず忘れないうちに記録しておきました。
【beamer】frame環境内で\defコマンドを使う【LaTeX】
環境内などで\def
コマンドによってマクロを定義すれば、その範囲(スコープ)内だけで使えるマクロになります(local macro)。
しかし、スライドのbeamer
クラスで用意されるframe
環境内で引数を取るlocal macroを定義しようと思ったら怒られました。
ダメ:
\begin{frame}{たいとる}{さぶ} \def\hoge#1{\relax} \end{frame} %% エラー %% -> Illegal parameter number in definition of \iterate.
どうやら#
を使うのがまずいみたいです。
代償はよくわかりませんが、frame
環境にfragile
オプションを与えれば使えるようになります。
OK:
\begin[fragile]{frame}{たいとる}{さぶ} \def\hoge#1{\relax} こんにち\hoge{こんばん}は \end{frame}
なんか、vrb
という中間ファイルが生成されますが、タイプセット後に消せば問題ないでしょう。
以上。
【LaTeX】数式番号にセクション番号を入れる(付録の修正についても)
数式番号にセクション番号を入れる方法を述べます。
標準(jsarticle.cls
)なら、数式番号は全セクションを通して(1), (2), ...
のように出力されるかと思います。
これにセクション番号を入れて、(1.1), (1.2), ..., (2.1), ...
のように出力されるようにします。
ついでに、数式番号だけじゃなくて図や表の番号もそういうスタイルに変更します。
環境
バージョン違っても多分大丈夫だと思いますが、想定している文書クラスが違うとダメかもしれないです。
- TeXLive 2019
uplatex + dvipdfmx
- 文書クラス:
jsarticle.cls
方法
プリアンブル(\documentclass
と\begin{document}
の間)に下記コードを追加します:
\makeatletter \@addtoreset{equation}{section} \@addtoreset{figure}{section} \@addtoreset{table}{section} \makeatother \renewcommand{\theequation}{\thesection.\arabic{equation}} \renewcommand{\thefigure}{\thesection.\arabic{figure}} \renewcommand{\thetable}{\thesection.\arabic{table}}
これでokと言いたいところですが、これでは\appendix
以降の付録のセクション中では、数式番号が(付録A.1)
のように出力されてしまいます。
数式番号には付録
という文字を入れたくないので、jsarticle.cls
で定義されている\appendix
コマンドを改造します。
ちなみに、jsarticle.cls
の場所が知りたいときは、ターミナルでkpsewhich jsarticle.cls
と打つとファイルのパスを教えてくれます。
さて、\appendix
コマンドを以下のように再定義します。
プリアンブルに追加してください。
\makeatletter \renewcommand{\appendix}{\par \setcounter{section}{0}% \setcounter{subsection}{0}% \gdef\presectionname{\appendixname}% \gdef\postsectionname{}% \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}% \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}% %% 追加 \renewcommand{\theequation}{\@Alph\c@section.\arabic{equation}}% \renewcommand{\thefigure}{\@Alph\c@section.\arabic{figure}}% \renewcommand{\thetable}{\@Alph\c@section.\arabic{table}}% } \makeatother
これで、付録のセクション中での数式番号は(A.1), (A.2), ...
のようになります。
\thesection
を再定義してしまうと、見出しや目次などで付録
の文字が表示されなくなってしまうので注意です。
また、もう一つ補足として、セクションが無い場合には、数式番号が(0.1), (0.2), ...
のように、セクション番号が0
と扱われて出力されます。
1ページのアブストなどの文書ではセクションは使わないので、そのときは元に戻したいです。
プリアンブルをstyファイルにしていろんな文書で使い回してる人には、if文でなんとか条件分けして欲しいところです。
ということで、以下のような修正案を提示します:
\renewcommand{\theequation}{% \ifnum\thesection>0 \thesection.\arabic{equation}% \else \arabic{equation}% \fi }
セクションがある(セクション番号が0
より大きい)ときにだけ、数式番号にセクション番号を追加します。
行末の%
は取っちゃダメです。余計なスペースが入ります。
まとめとサンプル
以上でもう文句はないかと思います。
最後に全部まとめた、タイプセット可能なサンプルコードを書いておきます。
%% uplatex -> dvipdfmx \documentclass[uplatex]{jsarticle} \usepackage{amsmath} \makeatletter \@addtoreset{equation}{section} \@addtoreset{figure}{section} \@addtoreset{table}{section} \renewcommand{\theequation}{% \ifnum\thesection>0 \thesection.\arabic{equation}% \else \arabic{equation}% \fi } \renewcommand{\thefigure}{% \ifnum\thesection>0 \thesection.\arabic{figure}% \else \arabic{figure}% \fi } \renewcommand{\thetable}{% \ifnum\thesection>0 \thesection.\arabic{table}% \else \arabic{table}% \fi } \renewcommand{\appendix}{\par \setcounter{section}{0}% \setcounter{subsection}{0}% \gdef\presectionname{\appendixname}% \gdef\postsectionname{}% \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}% \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}% %% 追加 \renewcommand{\theequation}{\@Alph\c@section.\arabic{equation}}% \renewcommand{\thefigure}{\@Alph\c@section.\arabic{figure}}% \renewcommand{\thetable}{\@Alph\c@section.\arabic{table}}% } \makeatother \begin{document} \section*{イントロ} 数式(\ref{eq:Euler})はオイラーの公式です(図\ref{fig:Euler}や表\ref{tab:Euler}を参照). \begin{align} e^{i \theta} = \cos\theta + i \sin\theta \label{eq:Euler} \end{align} \begin{figure} \caption{オイラー} \label{fig:Euler} \end{figure} \begin{table} \caption{オイラー} \label{tab:Euler} \end{table} \section{にゃあ} にゃお〜.数式(\ref{eq:nyaa})はにゃんこです(図\ref{fig:nyaa}や表\ref{tab:nyaa}を参照). \begin{align} 1 + 1 = 3 \label{eq:nyaa} \end{align} \begin{figure} \caption{にゃあ} \label{fig:nyaa} \end{figure} \begin{table} \caption{にゃあ} \label{tab:nyaa} \end{table} \appendix \section{にゃ〜ん} 付録にゃ.数式(\ref{eq:nyan})は付録のにゃんこです(図\ref{fig:nyan}や表\ref{tab:nyan}を参照). \begin{align} 1 + 1 = 3 \label{eq:nyan} \end{align} \begin{figure} \caption{にゃ〜ん} \label{fig:nyan} \end{figure} \begin{table} \caption{にゃ〜ん} \label{tab:nyan} \end{table} \end{document}
タイプセット結果:
以上です。お疲れさまでした。