我正在尝试在文档开头插入一些文本,同时\AtBeginDocument
使用lualatex
和fontspec
包裹
\documentclass{article}
\AtBeginDocument{X}
\usepackage{fontspec}
\AtBeginDocument{X}
\begin{document}
X
\end{document}
输出为
X
嗎?
其中_
实际上是空格。如果我删除fontspec
我的 MWE 生成的包
XXX
没有空格。这就是我想要的,但我当然也想使用fontspec
。我如何找出换行符和空格来自哪里。fontspec
这样做有什么原因吗?
答案1
fontspec 在开始文档钩子中设置了很多东西,如果你将示例修改为
\documentclass{article}
\makeatletter
\AtBeginDocument{X}
\show\@begindocumenthook
\usepackage{fontspec}
\show\@begindocumenthook
\AtBeginDocument{X}
\begin{document}
X
\end{document}
然后 TeX 停止
> \@begindocumenthook=macro:
->X.
第一次,但在加载字体规范后它显示
> \@begindocumenthook=macro:
->\RequirePackage {graphics}X\clist_map_inline:Nn \@filelist {\seq_gput_right:N
o \g__file_record_seq {\tl_to_str:n {##1}}}\cs_if_exist:NTF \__driver_color_ens
ure_current: {\cs_set_protected_nopar:Npn \color_ensure_current: {\__driver_col
or_ensure_current: }}{\cs_if_exist:NT \set@color {\cs_set_protected_nopar:Npn \
color_ensure_current: {\set@color }}}\cs_if_exist:NF \color {\DeclareRobustComm
and \color [2][]{}}\fontspec_patch_verbatim: \fontspec_patch_moreverb: \fontspe
c_patch_fancyvrb: \fontspec_patch_listings: \@TestForInputenc \@cleanupafterinp
utenc \let \textdotacute \tipaDOTacuteaccent \let \textgravedot \tipagraveDOTac
cent \let \textipa \tipacatchonechar \let \rtone \TIPArtonebar \let \stone \TIP
Astonebar \let \tone \TIPAtonebar \@ifpackageloaded {linguex}{\let \implementTI
PAtextx \implementTIPAtextxx }{}\GPT@fix \GPT@PatchTrig \GPT@LoadSuppPdf \ltx@I
fUndefined {define@key}{}{\define@key {Gin}{natwidth}{}\define@key {Gin}{nathei
ght}{}}\@ifpackageloaded {pst-pdf}{}{\@ifpackageloaded {pdftricks}{}{\RequirePa
ckage {pdftexcmds}[2007/11/11]\expandafter \ifx \csname pdf@shellescape\endcsna
me \relax \else \ifnum \pdf@shellescape >0 \RequirePackage {epstopdf-base}[2009
/07/12]\fi \fi }}\DeclareUTFmathsymbols {EU2}\fontspec_maybe_setup_maths: .
l.6 \show\@begindocumenthook
其中的一些内容会使段落中断。
最简单的做法是确保在添加任何文本之前或之后(最好)加载 fontspec,除非您的实际用例意味着简单的选项不可用。请注意,在 fontspec 的代码之前设置的文本是在设置字体之前设置的,因此一般来说可能都是错误的。