かすみん日記

暇なときに何か喋ります

【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に戻ったが、ブラウザでページを更新してももう文字化けの現象は再現できなかった。

意味がわからない。

上記手順と文字化けの因果関係は確かなものだと思うが、なにがなにやらわからん。

とりあえず、以上。

参考

stackoverflow.com

固定IPの確認方法

「あなたの固定IPを教えてくれ」と言われたら、それは多分グローバルIPアドレスのことを聞かれているのだと思います。

グローバルIPアドレスはインターネットプロバイダから提供されるやつです。

グローバルIPアドレスは動的な場合もあるようですが、普通は固定IPです。

グローバルIPアドレスを確認するには、下記サイトへアクセスするのが最も簡単なようです:

www.cman.jp

JavaScriptグローバルIPアドレスを取得して表示しているようです(ソースまでは確認していませんが)。

MacWindowsの設定アプリやシステム情報からグローバルIPアドレスを確認する方法はわかりませんでした。

Macでいろいろと探しましたが、プライベートIPアドレスしか確認できませんでした。

以上です。

参考

固定IPと動的IPの解説が書かれています。

上のリンクもこのページから引っ張ってきました。

www.cman.jp

【Mac】Java開発の環境構築(JDK, Homebrew, VSCode)

MacJavaの開発環境を構築します。

HomebrewでopenJDKのバージョン11をインストールして、VSCodeでも使えるようにします。

環境

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だと多分標準でjavajavacが既にインストールされている。

% 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

これからパスの設定をして、javajavacと打ったときにちゃんと新しくインストールしたものに変更されているか確認する。

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

そのあと、もう一度javajavacコマンドを実行してみると、ちゃんとインストールしたバージョンが表示されていることが確認できる:

% 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で開発環境を構築

vscodeJava拡張機能を入れれば、ボタンをポチポチするだけでプログラムを実行できるようになる。

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.javavscodeで開いて、タブの右側にあるボタンを押すか、mainメソッドの上に表示されている「Run」を押す。

そしたら、実行結果がエディタ内ターミナルに表示される。

このときに、ちゃんとjava homeを指定したバージョンのjavaが呼ばれていることを確認する。

以上!

疑問

よく環境変数$JAVA_HOMEを設定しましょうみたいな話があるが、やる意味あるのか疑問。

使いたいバージョンのjavajavacコマンドがちゃんと呼ばれてたら十分だと思う。

$JAVA_HOMEを設定したとしても、vscodesettings.jsonで改めて設定しないとそのバージョンのjavaは呼ばれないし、そもそも誰が$JAVA_HOMEなんていう変数を参照しているのか不明。

というわけで、環境変数$JAVA_HOMEを設定する意味はないかと思う。

参考

メモ

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)

Chrome拡張機能がいっぱいあっていいですね、、、

さて、macOSSafariで倍速再生ができる拡張機能のご紹介です。

Speed Player for Safari

Speed Player for Safari

結局、これ以外ないんじゃないかな。

最新アプデが6ヶ月前ですが、一応動きます(Monterey, 2022.4.7)。

Accelerate for Safari

Accelerate for Safari

これもそういう機能のはずですが、インストールしても機能しませんでした(Monterey, 2022.4.7)。

アプデも4ヶ月止まっているようです。

おわりに

Speed Player for Safari以外で正しく機能する、倍速再生の拡張機能があったら教えて下さい。

あるいは、作ってください!(^o^)/

以上です。

【LaTeX】ファイルを分割してサブディレクトリに配置する

本記事の目的

大規模なtex文書をファイル分割することでQOL向上に努めた証の記録。

順を追って解説します。

環境・バージョン

タイプセットはlatexmk (uplatex + dvipdfmx)コマンドで行います。

最後の方では、vscodeというエディタの拡張機能LaTeX Workshopを用いてタイプセットする方法も書いています。

素朴な方法

分割したtexファイルをsection01.texsection02.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.texsection02.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と書いてあるので、\ifsubfiletrueになります。

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.texsections/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という中間ファイルが生成されますが、タイプセット後に消せば問題ないでしょう。

以上。

tex.stackexchange.com

【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}

タイプセット結果:

f:id:geniusium:20220208090946p:plain

以上です。お疲れさまでした。