Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
LaTeX: 和文を欧文扱いして和文扱いする件
% upLaTeX文書; 文字コードはUTF-8
\documentclass[uplatex,a5paper]{utarticle}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{otf}% <?>で自動空白挿入
\usepackage[prefercjkvar]{pxcjkcat}
\usepackage{zrjapunct1}
\cjkcategory{latn1}{noncjk}% <é>は欧文
\begin{document}
\section{使用例(※意味無し)}
その地を揺るがす発表――そう題された――中で発された一節が、次のものである。
“Macros are passé—It’s \emph{so} mid-20th-century.”
ご存知の通り……(えっ知らないの⁉何で?ナンデナンデ⁇)
\section{さらなる――無意味な――使用例}
% —(U+2014)は欧文emダッシュ
% ―(U+2015)は和文全角ダーシ、2個で倍角ダーシ
テスト—テスト―テスト――テスト
\section{おしまい‼}
\end{document}
%% 文字コードはUTF-8; upLaTeX用
% zrjapunct1.sty
%% パッケージ宣言
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{zrjapunct1}
\def\tczji@pkgname{zrjapunct1}
%% 前提パッケージ
\RequirePackage{pxcjkcat}
\RequirePackage{newunicodechar}
%--------------------------------------- 準備
%% 和文文字命令
%※補助ファイル出力に必要
\kchardef\tczji@J@hyphen="2010 %<‐>HYPHEN / ハイフン(四分)
\kchardef\tczji@J@endash="2013 %<–>EN DASH / 二分ダーシ
\kchardef\tczji@J@emdash="2014 %<—>EM DASH / ダッシュ(全角)
\kchardef\tczji@J@horizbar="2015 %<―>HORIZONTAL BAR
\kchardef\tczji@J@quoteleft="2018 %<‘>LEFT SINGLE QUOTATION MARK / 左シングル引用符
\kchardef\tczji@J@quoteright="2019 %<’>RIGHT SINGLE QUOTATION MARK / 右シングル引用符
\kchardef\tczji@J@quotedblleft="201C %<“>LEFT DOUBLE QUOTATION MARK / 左ダブル引用符
\kchardef\tczji@J@quotedblright="201D %<”>RIGHT DOUBLE QUOTATION MARK / 右ダブル引用符
\kchardef\tczji@J@twodotleader="2025 %<‥>TWO DOT LEADER / 二点リーダ
\kchardef\tczji@J@ellipsis="2026 %<…>HORIZONTAL ELLIPSIS / 三点リーダ
\kchardef\tczji@J@referencemark="203B %<※>REFERENCE MARK / 米印
\kchardef\tczji@J@dblexclam="203C %<‼>DOUBLE EXCLAMATION MARK / 感嘆符二つ
\kchardef\tczji@J@dblquestion="2047 %<⁇>DOUBLE QUESTION MARK / 疑問符二つ
\kchardef\tczji@J@questexclam="2048 %<⁈>QUESTION EXCLAMATION MARK / 疑問符感嘆符
\kchardef\tczji@J@exclamquest="2049 %<⁉>EXCLAMATION QUESTION MARK / 感嘆符疑問符
%% General Punctuation ブロックを欧文扱い
\cjkcategory{sym04}{noncjk}
%--------------------------------------- ダッシュ類
% ‐(U+2010)は和文ハイフン
%※ - で欧文ハイフン
\newunicodechar{‐}{\tczji@J@hyphen}
%※ –(U+2013)は欧文enダッシュ (定義済)
%※ —(U+2014)は欧文emダッシュ (定義済)
% ―(U+2015)は和文全角ダーシ
% ――は和文倍角ダーシ
\newunicodechar{―}{\tczji@do@emdash}
%% \tczji@do@emdash
% 直後が \tczji@do@emdash または<―>の場合は、それを含めて
% 全体で倍角ダーシを出力する。それ以外は全角ダーシを出力。
%※ <――>を保護付完全展開すると"\tczji@do@emdash\tczji@do@emdash"
%となることに注意。
\DeclareRobustCommand*{\tczji@do@emdash}{% 保護付
\@ifnextchar\tczji@do@emdash% 次が \tczji@do@emdash か?
{\tczji@do@emdash@a}{\tczji@do@emdash@b}}
\def\tczji@do@emdash@a#1{% #1=\tczji@do@emdash@a のはず
\tczji@do@dbldash}% 倍角ダーシを出力
\def\tczji@do@emdash@b{% U+2015 = <E2 80 95>
\@ifnextchar^^e2% 次がE2か?
{\tczji@do@emdash@c}%
{\tczji@J@horizbar}}% 全角ダーシを出力
\def\tczji@do@emdash@c#1#2#3{% 3バイト読む
\def\tczji@tmpa{#1#2#3}\def\tczji@tmpb{―}%
\ifx\tczji@tmpa\tczji@tmpb% 次の3バイトが<―>なら
\let\tczji@tmpa\tczji@do@dbldash % 倍角ダーシを出力
\else \tczji@J@horizbar % 全角ダーシを出力、後に元の3バイト
\fi \tczji@tmpa}
%% \tczji@do@dbldash
% 倍角ダーシを出力する。
\def\tczji@do@dbldash{%
\tczji@J@horizbar \kern-.5zw \tczji@J@horizbar
\kern-.5zw \tczji@J@horizbar}
%--------------------------------------- クオート類
% 縦組なので和文のクオートは使わない前提。
%※ ‘(U+2018) ’(U+2019)は欧文シングルクオート [定義済]
%※ “(U+201C) ”(U+201D)は欧文ダブルクオート [定義済]
%--------------------------------------- 区切り符号
% ‼(U+203C)は和文の区切り符号
\newunicodechar{‼}{\tczji@J@dblexclam\tczji@sp}
% ⁇(U+2047)は和文の区切り符号
\newunicodechar{⁇}{\tczji@J@dblquestion\tczji@sp}
% ⁈(U+2048)は和文の区切り符号
\newunicodechar{⁈}{\tczji@J@questexclam\tczji@sp}
% ⁉(U+2049)は和文の区切り符号
\newunicodechar{⁉}{\tczji@J@exclamquest\tczji@sp}
%% \tczji@sp
% 直後が閉じ括弧でないなら全角空白を出力する。
\DeclareRobustCommand*{\tczji@sp}{% 保護付にする
\@ifnextchar ){}{%
\@ifnextchar 」{}{%
\@ifnextchar ]{}{\hskip1zw\relax}}}}
%--------------------------------------- その他
% ‥(U+2025)は和文二点リーダ
\newunicodechar{‥}{\tczji@J@twodotleader}
% …(U+2026)は和文三点リーダ
%※ \ldots は欧文三点リーダ
\newunicodechar{…}{\tczji@J@ellipsis}
% ※(U+203B)は和文米印
%※textcompの \textreferencemark は欧文米印
\newunicodechar{※}{\tczji@J@referencemark}
%--------------------------------------- おしまい
\endinput
%% EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.