有没有办法自动更改逗号/句号和脚注标记之间的字距?

有没有办法自动更改逗号/句号和脚注标记之间的字距?

这个问题导致了一个新的方案的出现:
fnpct

跟进我的问题是关于标点符号后的脚注符号的字距,我想知道是否有办法自动实现脚注标记在逗号或句号上的字距调整,或者使用比我在此处提供的更好的宏。我将重复我的结果和我建议的宏。

在这里,脚注标记向左移动了不到标点符号宽度的三分之一,而普通脚注标记(即在任何其他符号或字母之后的脚注标记)向右移动了相同的量,灵感来自http://www.read.seas.harvard.edu/~kohler/latex.html并显示在我的评论

套餐违约赔偿

这是通过以下代码实现的:

\documentclass{article}
% URW Classico is a font that makes the issue apparent
\renewcommand{\sfdefault}{uop}
\renewcommand{\familydefault}{\sfdefault}
% define punctuation-aware footnote macro
\let\origfootnote\footnote
\renewcommand{\footnote}[1]{\kern.06em\origfootnote{#1}}
\newcommand{\punctfootnote}[1]{\kern-.06em\origfootnote{#1}}
% define a very small 
\setlength{\textwidth}{150pt}
\setlength{\textheight}{5\baselineskip}
\begin{document}
\noindent The three little pigs built their houses out of
straw,\punctfootnote{not to be confused with hay}
sticks\footnote{or lumber according to some sources} and
bricks.\punctfootnote{probably fired clay bricks}
\end{document}

对我来说,使用 LuaLaTeX 是一种选择。我也知道关于自动字距调整的现有问题但我对如何将那里的 LuaLaTeX 代码应用于我的问题了解甚少。

答案1

编辑-使用新包:

随附包装fnpct现在可用只需使用\usepackage{fnpct}并确保标点符号跟随脚注:

\documentclass{article}
% for demonstration purposes only: make the page small!
\usepackage[
  paperwidth=.5\textwidth,
  paperheight=15\baselineskip,
  margin=5pt,
  bottom=1.5cm]{geometry}

\usepackage{fnpct}

\begin{document}
  \noindent The three little pigs built their houses
  out of straw\footnote{not to be confused with hay},
  sticks\footnote{or lumber according to some sources}
  and bricks\footnote{probably fired clay bricks}.

  % without `fnpct' for comparison:
  \setfnpct{dont-mess-around}\setcounter{footnote}{0}
  \noindent The three little pigs built their houses
  out of straw\footnote{not to be confused with hay},
  sticks\footnote{or lumber according to some sources}
  and bricks\footnote{probably fired clay bricks}.
\end{document}

在此处输入图片描述


原答案:

下面的代码是使用 的尝试expl3。它使用你的答案的价值.06em对于您的相关问题:如果后面有点或逗号则跳回,否则插入.06em

\documentclass{article}

\renewcommand\familydefault{\sfdefault}
\usepackage{xparse}

\ExplSyntaxOn
% save definition of \footnote
\cs_new_eq:NN \fnpct_orig_footnote:w \footnote

% redefine \footnote
\RenewDocumentCommand \footnote { om }
  { \fnpct_dot_or_comma:nn { #1 } { #2 } }

% internal footnote function:
\cs_new:Npn \fnpct_dot_or_comma:nn #1#2
  {
    % if a dot follows remove it, insert dot, skip back
    % and then insert footnote
    \peek_meaning_remove:NTF .
      {
        . \skip_horizontal:n { -.06em }
        \IfNoValueTF { #1 }
          { \fnpct_orig_footnote:w { #2 } }
          { \fnpct_orig_footnote:w [ #1 ] { #2 } }
      }
      {
        % else do the same with comma
        \peek_meaning_remove:NTF ,
          {
            , \skip_horizontal:n { -.06em }
            \IfNoValueTF { #1 }
              { \fnpct_orig_footnote:w { #2 } }
              { \fnpct_orig_footnote:w [ #1 ] { #2 } }
          }
          {
            % else insert space and then footnote
            \skip_horizontal:n { .06em }
            \IfNoValueTF { #1 }
              { \fnpct_orig_footnote:w { #2 } }
              { \fnpct_orig_footnote:w [ #1 ] { #2 } }
          }
      }
  }
\ExplSyntaxOff

\setlength\textwidth{150pt}
\setlength\textheight{5\baselineskip}

\begin{document}

\noindent The three little pigs built their houses
out of straw\footnote{not to be confused with hay},
sticks\footnote{or lumber according to some sources} and
bricks\footnote{probably fired clay bricks}.

\end{document}

答案2

为了实现你的目标,你似乎必须侵入命令\footnote来检查前一个字符。我无法向你展示可行的 tex-code,但在包中脚杂 罗宾·费尔贝恩斯已编写一个名为 的选项multiple。该选项在多个脚注标记之间添加逗号,以防您在同一个位置有多个脚注。这意味着您必须知道前一个字符是脚注标记。也许您可以根据自己的目的调整代码。

该代码在手册的第 6.1 节下进行了注释,并且非常先进...我不是 TeX 大师,无法解码代码。

您的链接https://tex.stackexchange.com/a/10457/9632回答了这个问题:在 LaTeX 中是否可以调整两个字符对的字距。LuaLaTeXfontspec似乎是最简单的解决方案。在这个答案中;https://tex.stackexchange.com/a/53594/9632;您会发现一些luacode可以即时调整字距的方法。

另一方面,当您进行最后的校对时,手动操作可能会减少工作量(但不那么有趣)。

相关内容