注意:随后,我发布了一个与此类似的问题,使用与 OP 结构相同的代码和设置“a
有什么特别之处ㄅ
“。
好的。我已经准备好了 MWE,但它需要进行大量设置。
这个问题与以下角色有关:
- 、
和
- ~
我使用特定的代码来显示中文文本,并且我最喜欢的字体允许毫不费力地使用上面的两个字符,如果您愿意,请安装该字体韩王凯MediumChuIn_wp010-08.ttf(下载链接在这里或者如果不是这里)。
我们还需要什么?我们需要:
好的。如果它们都与我们的 TeX 文件位于同一文件夹中,我们就可以开始了。TeX 文件应如下所示(使用 LuaLaTeX 编译两次):
TeX 文件
% !TEX TS 程序 = lualatexmk
\documentclass{scrreprt}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Chinese splitter
\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\bgroup \catcode`!=3 \catcode`?=3
\gdef\replacestrings#1#2{\long\def\replacestringsA##1#1{\def\tmpb{##1}\replacestringsB}%
\long\def\replacestringsB##1#1{\ifx!##1\relax \else\addto\tmpb{#2##1}%
\expandafter\replacestringsB\fi}% improved version <May 2016> inspired
\expandafter\replacestringsA\tmpb?#1!#1% from pysyntax.tex by Petr Krajnik
\long\def\replacestringsA##1?{\def\tmpb{##1}}\expandafter\replacestringsA\tmpb
}
\egroup
%
\def\Chinese#1{\def\tmpb{#1}%
\replacestrings {\\} {&\\}%
\replacestrings {\endgraf} {&\endgraf}%
\replacestrings {★} {&★}%
\replacestrings {【} {&【}%
\replacestrings {】} {&】}%
\replacestrings {(} {&(}%
\replacestrings {)} {&)}%
\replacestrings {:} {&:}%
\replacestrings {。} {&。}%
\replacestrings {,} {&,}%
\replacestrings {「} {&「}%
\replacestrings {」} {&」}%
\replacestrings {《} {&《}%
\replacestrings {》} {&》}%
\replacestrings {、} {&、}%
\replacestrings {;} {&;}%
%
\replacestrings {~} {&~}%
%
% \replacestrings {~} {&{\string~}}%
%
\replacestrings {\textasciitilde} {&\textasciitilde}%
\replacestrings {〈} {&〈}%
\replacestrings {〉} {&〉}%
\replacestrings {·} {&·}%
\replacestrings {.} {&.}%
%
% \replacestrings {﹑} {&{\string、}}%
\replacestrings {﹑} {&、}%
%
\replacestrings {\scriptsize} {&\scriptsize}%
\replacestrings {\footnotesize} {&\footnotesize}%
\replacestrings {\small} {&\small}%
\replacestrings {\normalsize} {&\normalsize}%
\replacestrings {\large} {&\large}%
\replacestrings {\Large} {&\Large}%
\replacestrings {\LARGE} {&\LARGE}%
\replacestrings {\huge} {&\huge}%
\replacestrings {\Huge} {&\Huge}%
\expandafter\anyA\tmpb&{}%
}
\def\anyA#1{\anyX{#1}#2\ifx&\else\expandafter\anyB\fi}
\def\anyB{\futurelet\next\anyC}
\def\anyC{\expandafter\ifx\space\next\space\fi\anyA}
%
\def\anyX#1{\tooltips[height=10cm]{#1} \space}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% For the Chinese font
\usepackage{fontspec}
\usepackage{luatexja-fontspec}
\setmainjfont{HanWangKaiMediumChuIn_wp010-08}
\ltjsetparameter{kanjiskip=1em}
\ltjsetparameter{xkanjiskip=1em}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Encoding converter and tooltipper
\tracinglostchars=2
\directlua{require('big5.lua')}
\directlua{print('The big5 version of 高 is: ' .. big5FromChar('高'))}
\newcommand{\bigfive}[1]{\directlua{tex.sprint(big5FromChar('#1'))}}
%
% tooltips with LaTeX
%
% optimized for Adobe Reader (visible on mouse-over)
% usage: \tooltip[<link colour>]{<link text>}[<tip box colour>]{<tip text>}
% non-draggable version:
% usage: \tooltip*[<link colour>]{<link text>}[<tip box colour>]{<tip text>}
%
% for Evince (visible on click, not draggable)
% usage: \tooltip**[<link colour>]{<link text>}[<tip box colour>]{<tip text>}
%
%
\usepackage{pdfbase}[2017/03/16]
\usepackage{xparse,ocgbase}
\usepackage{xcolor,calc}
\usepackage{tikz}
\usetikzlibrary{calc}
%
\ExplSyntaxOn
\let\tpPdfLink\pbs_pdflink:nn
\let\tpPdfAnnot\pbs_pdfannot:nnnn\let\tpPdfLastAnn\pbs_pdflastann:
\let\tpAppendToFields\pbs_appendtofields:n
\def\tpPdfXform{\pbs_pdfxform:nnnnn{1}{1}{}{}}
\let\tpPdfLastXform\pbs_pdflastxform:
\ExplSyntaxOff
%
\makeatletter
\NewDocumentCommand{\tooltip}{ssO{black}mO{black}m}{{%
\leavevmode%
\IfBooleanT{#1}{%
\ocgbase@new@ocg{tipOCG.\thetcnt}{%
/Print<</PrintState/OFF>>/Export<</ExportState/OFF>>%
}{false}%
\xdef\tpTipOcg{\ocgbase@last@ocg}%
}%
\tpPdfLink{%
\IfBooleanTF{#2}{%
/Subtype/Link/Border [0 0 0]/A <</S/SetOCGState/State [/Toggle \tpTipOcg]>>
}{%
/Subtype/Screen%
\IfBooleanTF{#1}{%
/AA<<%
/E<</S/SetOCGState/State [/ON \tpTipOcg]>>%
/X<</S/SetOCGState/State [/OFF \tpTipOcg]>>%
>>%
}{
/AA<<%
/E<</S/JavaScript/JS(%
var fd=this.getField('tip.\thetcnt');%
\IfBooleanF{#1}{%
if(typeof(click\thetcnt)=='undefined'){%
var click\thetcnt=false;%
var fdor\thetcnt=fd.rect;var dragging\thetcnt=false;%
}%
}%
if(fd.display==display.hidden){%
fd.delay=true;fd.display=display.visible;fd.delay=false;%
}%
this.dirty=false;%
)>>%
/X<</S/JavaScript/JS(%
if(!click\thetcnt&&!dragging\thetcnt){fd.display=display.hidden;}%
if(!dragging\thetcnt){click\thetcnt=false;}%
this.dirty=false;%
)>>%
/U<</S/JavaScript/JS(click\thetcnt=true;this.dirty=false;)>>%
/PC<</S/JavaScript/JS (%
var fd=this.getField('tip.\thetcnt');%
try{fd.rect=fdor\thetcnt;}catch(e){}%
fd.display=display.hidden;this.dirty=false;%
)>>%
/PO<</S/JavaScript/JS(this.dirty=false;)>>%
>>%
}
}%
}{{\color{#3}#4}}%
\sbox\tiptext{\fcolorbox{black}{#5}{#6}}%
\edef\twd{\the\wd\tiptext}%
\edef\tht{\the\ht\tiptext}%
\edef\tdp{\the\dp\tiptext}%
\tpPdfXform{\tiptext}%
%tip box placed at top left page corner
\begin{tikzpicture}[remember picture,overlay]
\node [inner sep=0pt, anchor=base] at (current page.north west) {%
\raisebox{-1.5cm-\tht}[0pt][0pt]{%
\tpPdfAnnot{\twd}{\tht}{\tdp}{%
/Subtype/Widget/FT/Btn/T (tip.\thetcnt)%
/AP<</N \tpPdfLastXform>>%
/MK<</TP 1/I \tpPdfLastXform/IF<</S/A/FB true/A [0.0 0.0]>>>>%
\IfBooleanTF{#1}{%
/Ff 65537/OC \tpTipOcg%
}{%
/Ff 65536/F 3%
/AA <<%
/U <<%
/S/JavaScript/JS(%
var fd=event.target;%
var mX=this.mouseX;var mY=this.mouseY;%
var drag=function(){%
var nX=this.mouseX;var nY=this.mouseY;%
var dX=nX-mX;var dY=nY-mY;%
var fdr=fd.rect;%
fdr[0]+=dX;fdr[1]+=dY;fdr[2]+=dX;fdr[3]+=dY;%
fd.rect=fdr;mX=nX;mY=nY;%
};%
if(!dragging\thetcnt){%
dragging\thetcnt=true;Int=app.setInterval("drag()",1);%
}%
else{app.clearInterval(Int);dragging\thetcnt=false;}%
this.dirty=false;%
)%
>>%
>>%
}%
}%
\tpAppendToFields{\tpPdfLastAnn}%
}%
};
\end{tikzpicture}
\stepcounter{tcnt}%
}}
\makeatother
\newsavebox\tiptext\newcounter{tcnt}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\ExplSyntaxOn
\NewDocumentCommand{\tooltips}{sO{}m+O{}}
{
\tl_map_inline:nn { #3 }
{
\IfBooleanTF{#1}{\tooltip*}{\tooltip*}{##1}{\includegraphics[#2]{\bigfive{##1}}}#4
}
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%
%All of this works fine
\Chinese{疊}
\Chinese{疊。。【疊 ,疊;【疊 疊《疊(疊\textasciitilde 疊···疊疊】疊\footnotesize 疊疊\Large 疊;〈疊\endgraf}
﹑
~
﹑~﹑
~﹑~
%
%%%%%%%%%
%%%%%%%%%
%All of this doesn't work ... why?
%
%\Chinese{疊~疊}
%
%
%\Chinese{疊﹑疊}
%
%%%%%%%%%
\end{document}
问题
为什么
\Chinese{疊~疊}
不是“工作”,为什么
\Chinese{疊~疊}
不行”?
答案1
根据用户 David Carlisle 的第一条评论(对该 OP 的第一条评论),出于调试目的,可以\show~
在之后添加\begin{document}
以下内容:
\begin{document} \show~
编译此代码时,错误输出将如下所示(在本例中为该行l.220,将引用上面()的行号\begin{document} \show~
:
! 未定义控制序列。l.220 \show~
以下情况将返回类似的错误:
\begin{document}\show﹑
David 声称这意味着:
一些包使这个字符变得活跃,然后
\let
它变成了未定义的东西。
因此,David 建议添加
\catcode`\~=12
紧接着,\begin{document}
结果为:
\begin{document} \catcode`\~=12
然后你会注意到角色的问题~
已经解决了。
﹑
您可以通过将行更改为以下内容来对角色执行相同操作:
\begin{document} \catcode`\﹑=12
如果要修复两个角色的问题,请将该行更改为:
\begin{document} \catcode`\﹑=12 \catcode`\~=12
我发现错误是由于 造成的\usepackage{luatexja-fontspec}
。上述修复在某些情况下有效,但并非在所有情况下都有效。
我遇到了新情况,这种解决方案不再有效。因此,我发布了一篇新的 OP,标题为“\usepackage{luatexja-fontspec} - 有什麽特别的呢 ─ 和 ~ (OP2)“。