Closed zhsj closed 3 years ago
但是问题好像并没有修复呀,是不在xeCJK修复的范围吗? :cry:
另外,如果不在 xeCJK 中修复的话,在下游软件(比如sphinx)中推荐的修复方法是哪个呀? #331 中好像提到了几种方案。。
但是问题好像并没有修复呀,是不在xeCJK修复的范围吗? 😢
我觉得是不好修,因为这个环境不是内核里有的。
另外,如果不在 xeCJK 中修复的话,在下游软件(比如sphinx)中推荐的修复方法是哪个呀? #331 中好像提到了几种方案。。
在导言区对环境打补丁。
可以考虑给 fancyvrb
包单独打个补丁的。
一种补丁方式
\documentclass{article}
\usepackage{fancyvrb}
% \usepackage{fvextra}
\usepackage{xeCJK}
\makeatletter
\ExplSyntaxOn
\AtBeginDocument
{
\xeCJK_if_package_loaded:nTF {fvextra}
{
\tl_gput_left:Nn \FV@FormattingPrep@PostHook
{ \__xeCJK_verb_font_hook: }
}
{
\xeCJK_if_package_loaded:nT {fancyvrb}
{
\tl_gput_right:Nn \FV@FormattingPrep
{ \__xeCJK_verb_font_hook: }
}
}
}
\ExplSyntaxOff
\makeatother
\begin{document}
normal: "你好"
in \verb|\verb| and \verb|verbatim|
\verb|"你好"|, \begin{verbatim}
"你好"
\end{verbatim}
in \verb|\Verb| and \verb|Verbatim|
\Verb|"你好"|, \begin{Verbatim}
"你好"
\end{Verbatim}
\end{document}
多谢。 @stone-zeng 在 https://github.com/sphinx-doc/sphinx/issues/9414#issuecomment-875676739 上的 comment 好像比较简单 :joy:
这里考虑得更多,例如
\fvset{formatcom=<code>}
,则再用一次 formatcom=...
会覆盖之前的 <code>
。所以我在 https://github.com/sphinx-doc/sphinx/issues/9414#issuecomment-875705288 建议使用 formatcom*
。这对于程序自动生成的 Verbatim
环境,应该够用了。xeCJK
选项 Verb
的控制、在需要开启时自动应用 formatcom*=\xeCJKVerbAddon
等。直接 patch fancyvrb
里和 \verbatim@font
对应的 \FV@SetupFont
也是个办法
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xeCJK}
\makeatletter
\ExplSyntaxOn
\AtBeginDocument
{
\xeCJK_if_package_loaded:nT {fancyvrb}
{
\tl_put_right:Nn \FV@SetupFont
{ \__xeCJK_verb_font_hook: }
}
}
\ExplSyntaxOff
\makeatother
\begin{document}
normal: "你好"
in \verb|\verb| and \verb|verbatim|
\verb|"你好"|, \begin{verbatim}
"你好"
\end{verbatim}
in \verb|\Verb| and \verb|Verbatim|
\Verb|"你好"|, \begin{Verbatim}
"你好"
\end{Verbatim}
\end{document}
使用 xelatex 编译后渲染出来的效果是
我认为Verbatim环境里不应该自动加空格,不需要用户手动设置
\CJKsetecglue{}
。原始问题 https://github.com/sphinx-doc/sphinx/issues/9414 在使用 sphinx 编译文档时,发现渲染出来的代码片段里有多余的空格。