使用 pLaTeX 製作日文 PDF 的方法
整理了使用 pLaTeX 製作日文 PDF 文件的步驟。從範本的構成到編譯,以及常見錯誤的處理都會說明。
整理了使用 pLaTeX 製作日文 PDF 文件的步驟。從範本的構成到編譯,以及常見錯誤的處理都會說明。
將使用 ISO 映像在 Linux(RHEL 系)上安裝 TeX Live 2026 的步驟整理如下,適用於 RHEL 系統。
https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz
從這裡下載。
參考: https://docs.rockylinux.org/8/guides/interoperability/import_rocky_to_wsl/
將 tar.xz 解壓成 tar 檔。轉成 tar 後即可匯入到 WSL2。
cd ~/Downloads
xz -d Rocky-8-Container-Base.latest.x86_64.tar.xz
※Windows 上預裝的 bsdtar 無法解壓此檔。
※若沒有 xz 指令,可在 Cygwin64 安裝,或使用其他 WSL 發行版來解壓。
將映像匯入到 WSL2。
wsl --import RockyLinux-8.10 $HOME .\Rocky-8-Container-Base.latest.x86_64.tar --version 2
wsl -l -v
以使用者名稱 hikari 為例:
wsl -d RockyLinux-8.10 -u root -- dnf install sudo passwd -y
wsl -d RockyLinux-8.10 -u root -- adduser hikari
wsl -d RockyLinux-8.10 -u root -- passwd -d hikari
wsl -d RockyLinux-8.10 -u root -- usermod -aG wheel hikari
wsl -d RockyLinux-8.10 -u root -- sed -i 's/^# %wheel/%wheel/' /etc/sudoers
wsl -d RockyLinux-8.10 -u root -- echo -e "[user]\\ndefault=hikari" `| tee -a /etc/wsl.conf
wsl -d RockyLinux-8.10
請搜尋上述套件,並從 rpmfind.net 下載。
確認架構是否正確。
指定下載的 rpm 檔案,使用 dnf 指令安裝。
cd ~/Downloads
sudo dnf install ./mozc-2.31.5810.102-160000.1.2.aarch64.rpm ./mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm ./ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm
先登出一次。
打開「設定」→「鍵盤」,然後按此順序新增:
設定完成!
$dest = Join-Path $env:TEMP "Rocky-8-Container-Base.latest.x86_64.tar.xz"
Invoke-WebRequest -Uri "https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz" -OutFile $dest
wsl --import RockyLinux-8.10 $HOME $dest
wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y passwd
$username = "hikari" # 設定你想要的使用者名稱
wsl -d RockyLinux-8.10 -u root useradd -mG wheel $username
wsl -d RockyLinux-8.10 -u root passwd -d $username # 清除使用者密碼
wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install sudo -y
$username = "hikari" # 設定你想要的使用者名稱
$uid = wsl -d RockyLinux-8.10 id $username -u
if (-not $uid) {
Write-Error "取得 UID 失敗。使用者 '$username' 可能不存在。"
exit 1
}
$basePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"
$targetKey = Get-ChildItem $basePath | Where-Object {
(Get-ItemProperty $_.PSPath).DistributionName -eq "RockyLinux-8.10"
}
if (-not $targetKey) {
Write-Error "找不到 DistributionName 'RockyLinux-8.10'。"
exit 1
}
Set-ItemProperty -Path $targetKey.PSPath -Name "DefaultUid" -Value ([int]$uid)
wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y epel-release
wsl -d RockyLinux-8.10
wsl --set-default RockyLinux-8.10
wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install fastfetch
> wsl -d RockyLinux-8.10 -u root fastfetch
__wgliliiligw_, root@DESKTOP-MS-7C56-B550
_williiiiiiliilililw, -------------------------
_%iiiiiilililiiiiiiiiiii_ OS: Rocky Linux 8.10 x86_64
.Qliiiililiiiiiiililililiilm. Host: Windows Subsystem for Linux (2.0.14.0)
_iiiiiliiiiiililiiiiiiiiiiliil, Kernel: 5.15.133.1-microsoft-standard-WSL2
.lililiiilililiiiilililililiiiii, Uptime: 8 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili, Packages: 285 (rpm)
jliililiiilililiiili@` ~ililiiiiiL Shell: bash 4.4.20
iiiliiiiliiiiiiili>` ~liililii Display 1: 1920x1080 @ 60Hz
liliiiliiilililii` -9liiiil Display 2: 1920x1080 @ 60Hz
iiiiiliiliiiiii~ "4lili WM: WSLg (Wayland)
4ililiiiiilil~| -w, )4lf Terminal: Windows Terminal
-liiiiililiF' _liig, )' CPU: AMD Ryzen 9 3900X (24) @ 3.800018 GHz
)iiiliii@` _QIililig, GPU: Microsoft Corporation Basic Render Driver
)iiii>` .Qliliiiililw Memory: 458.57 MiB / 62.76 GiB (0%)
)<>~ .mliiiiiliiiiiil, Disk (/): 51.72 GiB / 1007 GiB (5%)
_gllilililiililii~ Locale: C.UTF-8
giliiiiiiiiiiiiT`
-^~$ililili@~~' ████████████████████████
████████████████████████
sudo dnf update -y
sudo subscription-manager repos --enable codeready-builder-for-rhel-10-x86_64-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
從官方頁面取得 AMI。
https://rockylinux.org/ja-JP/download
選擇要設定給實例的架構 (ARM (aarch64)),並選擇 Cloud Images 裡的 AWS AMI。

以版本號過濾,找到符合條件的映像。

AMI ID 無法直接複製,因此點擊 Deploy 按鈕,然後從 AWS 主控台複製。
用 AMI ID 搜尋會出現如下

用擁有者過濾會比較好。
擁有者 = 792107900819

ssh-keygen -t ed25519 指令產生公鑰,將 .ssh/id_ed25519.pub 匯入成 Key pair比起 NAT Gateway,使用公開 IP 比較便宜,所以建立 Elastic IP。
架構圖大概長這樣。


建立 EC2 Instance Connect 端點後,可以從 AWS CLI 登入。
因此我用以下條件建立。
在 PC 上打開終端機,執行以下指令。
aws ec2-instance-connect ssh --private-key-file .ssh/id_ed25519 --os-user rocky --instance-id i-*****************
Rocky Linux 的 AMI 映像沒有包含 Instance Connect 套件,無法從管理控制台連線。因此需要安裝套件。
參考 https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html 下載套件。
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect.rhel8.rpm -o /tmp/ec2-instance-connect.rpm
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm -o /tmp/ec2-instance-connect-selinux.rpm
sudo dnf install -y /tmp/ec2-instance-connect.rpm /tmp/ec2-instance-connect-selinux.rpm
安裝完成後,就可以從 AWS 管理控制台存取。

我做了 CDK 範例,放上來供參考。
請記得更改 keyName(Key pair)的名稱。
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
export interface RockyLinuxStackProps extends cdk.StackProps {
}
export class RockyLinuxStack extends cdk.Stack {
public constructor(scope: cdk.App, id: string, props: RockyLinuxStackProps = {}) {
super(scope, id, props);
// Resources
const ec2dhcpOptions = new ec2.CfnDHCPOptions(this, 'EC2DHCPOptions', {
domainName: 'ap-south-1.compute.internal',
domainNameServers: [
'AmazonProvidedDNS',
],
],
});
ec2dhcpOptions.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2InternetGateway = new ec2.CfnInternetGateway(this, 'EC2InternetGateway', {
{
value: 'igw',
key: 'Name',
},
],
});
ec2InternetGateway.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2vpc = new ec2.CfnVPC(this, 'EC2VPC', {
cidrBlock: '10.0.0.0/16',
enableDnsSupport: true,
instanceTenancy: 'default',
enableDnsHostnames: true,
{
value: 'vpc',
key: 'Name',
},
],
});
ec2vpc.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2VPCGatewayAttachment = new ec2.CfnVPCGatewayAttachment(this, 'EC2VPCGatewayAttachment', {
vpcId: ec2vpc.ref,
internetGatewayId: ec2InternetGateway.ref,
});
ec2VPCGatewayAttachment.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2NetworkAcl = new ec2.CfnNetworkAcl(this, 'EC2NetworkAcl', {
vpcId: ec2vpc.ref,
],
});
ec2NetworkAcl.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2RouteTable = new ec2.CfnRouteTable(this, 'EC2RouteTable', {
vpcId: ec2vpc.ref,
});
ec2RouteTable.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2SecurityGroup = new ec2.CfnSecurityGroup(this, 'EC2SecurityGroup', {
groupDescription: 'launch-wizard-1 created 2025-04-27T00:11:58.641Z',
groupName: 'launch-wizard-1',
vpcId: ec2vpc.ref,
securityGroupIngress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'tcp',
fromPort: 22,
toPort: 22,
},
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'icmp',
fromPort: 8,
toPort: -1,
},
],
securityGroupEgress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: '-1',
fromPort: -1,
toPort: -1,
},
],
});
ec2SecurityGroup.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2Subnet = new ec2.CfnSubnet(this, 'EC2Subnet', {
vpcId: ec2vpc.ref,
mapPublicIpOnLaunch: false,
enableDns64: false,
availabilityZoneId: 'aps1-az1',
privateDnsNameOptionsOnLaunch: {
EnableResourceNameDnsARecord: false,
HostnameType: 'ip-name',
EnableResourceNameDnsAAAARecord: false,
},
cidrBlock: '10.0.0.0/20',
ipv6Native: false,
{
value: 'subnet-public1-ap-south-1a',
key: 'Name',
},
],
});
ec2Subnet.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2InstanceConnectEndpoint = new ec2.CfnInstanceConnectEndpoint(this, 'EC2InstanceConnectEndpoint', {
preserveClientIp: false,
securityGroupIds: [
ec2SecurityGroup.attrGroupId,
],
subnetId: ec2Subnet.attrSubnetId,
});
ec2InstanceConnectEndpoint.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2vpcdhcpOptionsAssociation = new ec2.CfnVPCDHCPOptionsAssociation(this, 'EC2VPCDHCPOptionsAssociation', {
vpcId: ec2vpc.ref,
dhcpOptionsId: ec2dhcpOptions.ref,
});
ec2vpcdhcpOptionsAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2RouteHg = new ec2.CfnRoute(this, 'EC2RouteHG', {
routeTableId: ec2RouteTable.ref,
destinationCidrBlock: '0.0.0.0/0',
gatewayId: ec2InternetGateway.ref,
});
ec2RouteHg.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2SubnetNetworkAclAssociation = new ec2.CfnSubnetNetworkAclAssociation(this, 'EC2SubnetNetworkAclAssociation', {
networkAclId: ec2NetworkAcl.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetNetworkAclAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2SubnetRouteTableAssociation = new ec2.CfnSubnetRouteTableAssociation(this, 'EC2SubnetRouteTableAssociation', {
routeTableId: ec2RouteTable.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetRouteTableAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2Instance = new ec2.CfnInstance(this, 'EC2Instance', {
tenancy: 'default',
instanceInitiatedShutdownBehavior: 'stop',
cpuOptions: {
threadsPerCore: 1,
coreCount: 2,
},
blockDeviceMappings: [
{
ebs: {
volumeType: 'gp3',
iops: 3000,
volumeSize: 10,
encrypted: false,
deleteOnTermination: true,
},
deviceName: '/dev/sda1',
},
],
availabilityZone: 'ap-south-1a',
privateDnsNameOptions: {
enableResourceNameDnsARecord: false,
hostnameType: 'ip-name',
enableResourceNameDnsAaaaRecord: false,
},
ebsOptimized: true,
disableApiTermination: false,
keyName: 'hikari',
sourceDestCheck: true,
placementGroupName: '',
networkInterfaces: [
{
privateIpAddresses: [
{
privateIpAddress: '10.0.3.59',
primary: true,
},
],
secondaryPrivateIpAddressCount: 0,
deviceIndex: '0',
groupSet: [
ec2SecurityGroup.ref,
],
ipv6Addresses: [
],
subnetId: ec2Subnet.ref,
associatePublicIpAddress: true,
deleteOnTermination: true,
},
],
imageId: 'ami-0415efd8380284dc4',
instanceType: 't4g.medium',
monitoring: false,
],
creditSpecification: {
cpuCredits: 'unlimited',
},
});
ec2Instance.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2ElasticIp = new ec2.CfnEIP(this, 'EC2ElasticIp', {
domain: 'vpc',
{
key: 'Name',
value: 'elastic-ip',
},
],
});
ec2ElasticIp.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
const ec2EipAssociation = new ec2.CfnEIPAssociation(this, 'EC2EipAssociation', {
eip: ec2ElasticIp.ref,
instanceId: ec2Instance.ref,
});
ec2EipAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
}
}
選擇「具名管道」,並將管道名稱設定為「COM1」。

使用 sudo nano /etc/default/grub 開啟 GRUB 設定檔。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"
儲存後,執行以下指令套用 GRUB 設定:
sudo update-grub
設定服務以允許透過序列埠登入。
sudo systemctl enable [email protected]
sudo systemctl start [email protected]
以系統管理員身分啟動。

以系統管理員身分啟動。
| 序列線路 | 速率 | 連線類型: |
|---|---|---|
| \.\pipe\COM1 | 115200 | Serial |
設定以上項目。


以系統管理員身分啟動。

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
plink.exe -serial \\.\pipe\COM1 -sercfg 115200,8,n,1,N
按 Ctrl + C 結束。
這篇備忘錄記錄了 Linux 上的 NetworkManager。
NetworkManager 是一個動態網絡配置和管理守護程式,主要用於 Linux 系統。它旨在簡化網絡配置過程,特別是對於那些經常在不同網絡環境之間切換的筆記本電腦用戶,或需要圖形界面管理網絡連接的桌面用戶。
NetworkManager 會監測網絡設備的狀態,並自動配置它們,包括有線、無線、移動寬帶等連接。
NetworkManager 守護程式:主要的後台服務,負責管理網絡連接。nmcli (NetworkManager Command Line Interface):命令行工具,用於配置和顯示 NetworkManager 的狀態。nmtui (NetworkManager Text User Interface):基於文本的用戶界面工具,提供一個互動式的菜單來管理連接。nmcli 基本用法nmcli 是與 NetworkManager 交互最常用的命令行工具。
nmcli device status
輸出會列出所有網絡設備及其狀態(例如 ethernet wifi connected disconnected)。
nmcli connection show
這會列出所有已配置的網絡連接。
nmcli device disconnect eth0 # 斷開 eth0
nmcli device connect eth0 # 連接 eth0
nmcli radio wifi off # 禁用 Wi-Fi
nmcli radio wifi on # 啟用 Wi-Fi
nmcli connection add type ethernet con-name "MyWiredConnection" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 dns "8.1.1.1 8.8.4.4"
nmcli connection up "MyWiredConnection"
con-name:連接名稱。ifname:接口名稱 (例如 eth0)。ip4:IPv4 地址和子網掩碼。gw4:IPv4 網關。dns:DNS 服務器。nmcli device wifi rescan # 掃描 Wi-Fi 網絡
nmcli device wifi list # 列出可用 Wi-Fi 網絡
nmcli connection add type wifi con-name "MyWiFi" ifname wlan0 ssid "Your_SSID"
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Your_WiFi_Password"
nmcli connection up "MyWiFi"
ssid:Wi-Fi 網絡名稱。wifi-sec.key-mgmt wpa-psk:指定 WPA-PSK 密碼管理。wifi-sec.psk:Wi-Fi 密碼。nmcli connection modify "MyWiredConnection" ipv4.addresses 192.168.1.101/24
nmcli connection modify "MyWiredConnection" ipv4.gateway 192.168.1.2
nmcli connection modify "MyWiredConnection" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection modify "MyWiredConnection" ipv4.method manual # 靜態 IP
nmcli connection modify "MyWiredConnection" ipv4.method auto # DHCP
nmcli connection up "MyWiredConnection" # 應用更改
nmcli connection delete "MyWiredConnection"
nmtui 用法nmtui 是一個基於文本的互動式工具,對於不習慣 nmcli 複雜語法的用戶來說非常方便。
sudo nmtui
它會打開一個菜單,允許你:
systemd-networkd / netplan在現代 Linux 發行版中,網絡配置有多種方法。
systemd-networkd:Systemd 的網絡配置服務,更輕量,常用於伺服器環境。systemd-networkd。通常,在桌面 Ubuntu 系統中,NetworkManager 是預設的網絡管理工具。
journalctl -u NetworkManager) 以獲取錯誤信息。NetworkManager 服務正在運行 (sudo systemctl status NetworkManager)。/etc/resolv.conf 文件,它通常由 NetworkManager 管理。NetworkManager 是 Linux 系統中一個功能強大且靈活的網絡管理工具。無論是通過 nmcli 進行命令行配置,還是通過 nmtui 進行互動式配置,它都極大地簡化了網絡連接的管理,對於從普通用戶到系統管理員來說都是一個寶貴的工具。
這篇備忘錄記錄了在 Linux 上設置日語環境的方法。
在 Linux 系統中設置日語環境(包括語言、輸入法和字體)對於需要處理日語文本或開發日語應用程式的用戶來說至關重要。這確保了系統能夠正確顯示日語字符,並允許用戶使用日語輸入法。
區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。
locale
如果你的系統中沒有日語區域設置,你需要生成它。
編輯 locale.gen:
sudo vim /etc/locale.gen
查找並取消註釋(刪除前面的 #)以下行:
ja_JP.UTF-8 UTF-8
保存並退出。
生成區域設置:
sudo locale-gen
你可以將系統的默認區域設置設置為日語。
sudo update-locale LANG=ja_JP.UTF-8
或者,對於基於 Systemd 的系統:
sudo localectl set-locale LANG=ja_JP.UTF-8
重啟系統或重新登錄以應用更改。
最流行的日語輸入法是 Fcitx 和 Mozc。
安裝 Fcitx 輸入法框架:
sudo apt install fcitx fcitx-mozc fcitx-ui-classic fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5
(對於基於 Debian/Ubuntu 的系統)
配置 Fcitx:
啟用 Mozc:
切換輸入法:
通常默認的輸入法切換快捷鍵是 Ctrl + Space 或 Shift + Space。
IBus 是另一個流行的輸入法框架。
安裝 IBus 和 Mozc/Anthy:
sudo apt install ibus ibus-mozc # 或 ibus-anthy
配置 IBus:
為了正確顯示日語字符,你需要安裝日語字體。
sudo apt install fonts-noto-cjk fonts-ipafont fonts-japanese-gothic fonts-japanese-mincho
fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。fonts-ipafont:IPA 明朝/哥特體字體。在 GNOME 環境中,你可以通過「設定」->「外觀」->「字體」來更改系統默認字體。或者使用 GNOME Tweaks 工具進行更細緻的調整。
大多數現代終端模擬器都支持 UTF-8 編碼,這對於顯示日語字符是必要的。
echo $LANG
確保輸出包含 UTF-8。
如果你想查看日語版本的 man 手冊頁:
sudo apt install manpages-ja
在 Linux 上設置日語環境需要配置區域設置、安裝輸入法和字體。通過 Fcitx + Mozc 或 IBus + Mozc 的組合,你可以獲得一個功能齊全的日語輸入環境。安裝 Noto CJK 或 IPA 字體將確保日語字符的正確顯示。