Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pifont宏包可能会触发中文不显示 #688

Open
note286 opened this issue Nov 28, 2023 · 6 comments
Open

pifont宏包可能会触发中文不显示 #688

note286 opened this issue Nov 28, 2023 · 6 comments

Comments

@note286
Copy link

note286 commented Nov 28, 2023

已搜索到 #59 ,但是没能解决。

\documentclass[zihao=-4]{ctexart}
\usepackage{fancyhdr}
\usepackage{pifont}
\fancypagestyle{xxx}{\fancyhead{测试aaa}}
\pagestyle{xxx}
% \setmainfont{Times New Roman}
\usepackage{zhlipsum}
\begin{document}
\zhlipsum[1-2]
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
\par
\ding{"B7}
% {\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char"B7}
% {\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\makexeCJKinactive\char"B7}
\end{document}

image

上面是\ding{"B7}的情况。

image

上面是{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char"B7}的情况。和 #59 描述的一致。

image

上面是{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\makexeCJKinactive\char"B7}的情况。


此外,一旦增加内容,就会导致上述问题无法复现,例如,我们增加部分文字。

\documentclass[zihao=-4]{ctexart}
\usepackage{fancyhdr}
\usepackage{pifont}
\fancypagestyle{xxx}{\fancyhead{测试aaa}}
\pagestyle{xxx}
% \setmainfont{Times New Roman}
\usepackage{zhlipsum}
\begin{document}
\zhlipsum[1-2]
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你你
\par
\ding{"B7}
% {\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char"B7}
% {\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\makexeCJKinactive\char"B7}
\end{document}

上述代码仅增加了一行

image

可以看到又完全正常显示了。

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Nov 28, 2023

看起来和 TeX 的分页方式有关。

解决 #59 的结果之一是,如果 pifont 加载,xecjk 就重定义 \Pifont\ding 会展开到这个命令),局部地使用 \makexeCJKinactive,它把 \XeTeXinterchartokenstate 从 1 改为 0。但在特殊的输入组合下,这个局部的状态改变会泄漏到前一页的页脚。

目前我的建议是,把 \makexeCJKactive 加到页眉页脚的开头。

ctex-kit/xeCJK/xeCJK.dtx

Lines 9020 to 9024 in bed9006

\@@_package_hook:nn { pifont }
{
\RenewDocumentCommand \Pifont { m }
{ \makexeCJKinactive \usefont { U } {#1} { m } { n } }
}

以下的例子,\abc 的定义局部地从 outer 改为 inner,可以看到这个局部的状态改变泄漏到了第一页的页眉页脚。用 pdflatex、xelatex、lualatex 均可复现。(最好简化到能用 Knuth TeX 复现)

\documentclass{article}
\usepackage[papersize={6cm,5cm}, margin={1cm,.5in}]{geometry}
\renewcommand{\thepage}{\abc, \arabic{page}}
\parindent=0pt

\def\abc{outer}

\begin{document}
foo \\ bar \\ baz \\
foo \\ bar \\ baz \par
{\def\abc{inner}xx}
\end{document}

image

xeCJK 的例子,展示页眉和页脚都受影响

% !TeX program = xelatex
\documentclass{article}
\usepackage[papersize={6cm,5cm}, margin={1cm,.5in}]{geometry}
\usepackage{xeCJK}
\usepackage{fancyhdr}
\usepackage{pifont}
\fancypagestyle{xxx}{%
  \fancyhead[L]{\the\XeTeXinterchartokenstate 测试aaa}%
  \fancyfoot[C]{}%
  \fancyfoot[L]{\the\XeTeXinterchartokenstate 测试bbb}}
\pagestyle{xxx}

\parindent=0pt
\begin{document}
你你 \\ 你你 \\ 你你 \\
你你 \\ 你你 \\ 你你 \par
\ding{"B7}测试
\end{document}

image

@muzimuzhi
Copy link
Contributor

装进盒子也能解决问题,如 \hbox{\def\abc{inner}xx}\hbox{\ding{"B7}}

如果 \dingzjuthesis 文档类里使用的,也许能通过装进 \hbox 解决。我没下载 TheNetAdmin/zjuthesis#350 (comment) 里的附件,不清楚那个 \ding 符号是文档类还是用户使用的。

@Sophanatprime
Copy link

\ding 之前进入水平模式也可以:

\renewcommand\Pisymbol[2]{{\ifvmode\expandafter\indent\fi \Pifont{#1}\char#2}}

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Nov 28, 2023

为什么用 \indent,而不是 \leavevmode 进入水平模式?

啊,都行吧。注意 \indent 的行为就行

我还是觉得,塞一个 \indent\Pisymbol 里,不好。

@Sophanatprime
Copy link

\mode_leave_vertical: (以及 \leavevmode@ifvmode)就是使用这个定义,我是参考的这个。(当然直接用这两个宏会更好,避免误展开 \ifvmode

\mode_leave_vertical:\leavevmode 在实际使用时会有什么副作用吗?我没有使用前者而不使用后者的理由,同时也没有不使用后者的理由。

@note286
Copy link
Author

note286 commented Nov 28, 2023

如果 \dingzjuthesis 文档类里使用的,也许能通过装进 \hbox 解决。我没下载 TheNetAdmin/zjuthesis#350 (comment) 里的附件,不清楚那个 \ding 符号是文档类还是用户使用的。

@muzimuzhi 我确认了一下,是用户自己加载的pifont包。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants