使用 luaLaTeX 和一个相当简单的命令定义时,我遇到了一些奇怪的行为。我使用的是 TeXLive 2012,Linux x86_64。
当\settowidth
在序言中使用来计算以下示例中某些字符的宽度时,宽度被严重低估,并且当该宽度用于负缩进某些文本时,它不会对齐。
如果\settowidth
将操作移到文档环境内部,计算就没问题。
这是一个最小工作示例:
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{fontspec}
\newdimen\arrowwidth
\settowidth{\arrowwidth}{$\rightarrow$\ }
\newcommand{\note}[1]{\noindent\hskip-\arrowwidth{$\rightarrow$\ }{#1}}
\begin{document}
\lipsum[1]
%\settowidth{\arrowwidth}{$\rightarrow$\ }
\note{HELLO WORLD!}
\lipsum[2-2]
\end{document}
如果取消注释上面的行\note{HELLO WORLD}
,则一切都会按预期工作。
改变12pt
选项也会使问题发生很大变化。
字符→
不是问题。您可以用罗马文字代替右箭头,但仍然会出现问题。
有人知道这是什么原因造成的吗?还有人能重现这种情况吗?
答案1
由于技术原因,fontspec
在前言完全读入后会延迟一些字体设置。特别是,执行该命令时字体大小仍为 10pt 。您可以通过强制执行该命令来\settowidth
解决问题:\normalsize
\settowidth{\arrowwidth}{\normalsize$\rightarrow$\ }
但是有一种更巧妙的方法来定义你的\note
命令:
\newcommand{\note}[1]{\noindent\makebox[0pt][r]{$\rightarrow$\ }#1}
不需要任何测量。