\somefunction

\somefunction

我在数学模式下使用txfonts斜体\texttt,但字母的斜体校正不起作用:与右括号相邻的斜体/“TT”字母“d”触及了它。以下是最小示例代码:

\documentclass{article}
\usepackage{times}
\usepackage{txfonts}

\newcommand*{\halfthinspace}{\kern .08333em} % not sure whether I got this value right
\newcommand*{\shorthalfthinspace}{\kern .06em}
\newcommand*{\somefunction}[1]{\textit{F}(#1)}
\newcommand*{\ittt}[1]{\textit{\texttt{#1}}}

\begin{document}

\(\somefunction{\ittt{pd}}\) (what I get)

\(\somefunction{\ittt{pd}\shorthalfthinspace}\) (I want this)

\(\somefunction{\ittt{pd}\halfthinspace}\) (or this)

This is entity \ittt{pd}. (use of \verb|\ittt| within text; the spacing here is good)

\(\ittt{pd} \times \ittt{pd}\) (the space before the times symbol is minimally too thin)

\end{document}

\somefunction在( )的定义中包含额外的空格\newcommand*{\somefunction}[1]{\textit{F}(#1\shorthalfthinspace)}在语义上似乎是一种错误的方法。在 的定义中包含额外的空格似乎\ittt同样错误,特别是因为我偶尔想\ittt在文本中使用(参见我的示例代码生成的第 4 行)并且不想在句子末尾的句号前有额外的空格。最后,我可能会\ittt在其他上下文中使用,例如在\times运算符周围(参见我的示例代码生成的第 5 行);空格不仅太薄了,太薄(通过在查看器中将结果旋转 180° 即可轻松验证)。

在所有情况下获得适当间距的最简单方法是什么?

注意:我不知道这是斜体校正问题还是与我的宏结构有关\texttt。请随意改进我的问题标题。

答案1

\somefunction

我已经\textit完全删除了。在数学模式中,变量(a-zA-Zα-ο)通常以斜体形式排版。数学模式负责斜体校正(在本例中为F和之间)。 如果您想在文本中使用,请使用(
\somefunction总是内联数学( \(…\))。


pd对实体( )使用一个简单的定义并“修复”里面的间距\somefunction(或者更好:entityFunction/ \funcOfEnt/…)并没有错。除了当括号实体在函数外部更频繁地使用时,例如(\entity{pd} + \entity{qr}) x,函数的定义应该使用已经修补的\entity以更加一致。

\textit\texttt

我认为没有一个完全自动化的解决方案可以解决标点符号)及其后续问题。

让我们看一下这些选项:

\ittt

您的原文\ittt定义为

\newcommand*{\ittt}[1]{\textit{\texttt{#1}}}

\itttm

如果您只在标点符号前在文本模式下使用实体,\itttm则可以为您工作。它仅在数学模式下添加斜体校正。

\newcommand*{\itttm}[1]{%
    \ifmmode\mmodebeforetrue\else\mmodebeforefalse\fi%
    \textit{\texttt{#1\ifmmodebefore\/\fi}}%
}

\itttp

该宏\itttp以斜体形式排版第二个可选参数(但不属于打字机系列)。TeX.SE 上已经讨论过这个问题了。
在我看来,这甚至太紧了。

\DeclareDocumentCommand{\itttp}{m O{}}{%
  \textit{\texttt{#1}#2\/}%
}

\ttit

切换\textit\texttt可让我们获得斜体校正。但它也会在您不想要的标点符号前添加此斜体校正(即.,)。

\newcommand*{\ttit}[1]{\texttt{\textit{#1}}}

\ttitc

类似\ttit,但是:
if 宏会删除之前并使用负字距进行的\@ifnextchar斜体校正。.,

\emph或者\textit

我还测试了这两种变体\emph

  • \emph{\texttt{pd}}在标点符号前稍好一点,和在标点符号前)一样好\ittt
  • \texttt{\emph{pd}}和 一样糟糕\ttit

\entity[*]{<arg>}

我还声明了另一个宏:\entity。它确实存在非星号和星号形式。
如果你确实需要,请使用星号形式不是想要斜体校正(即.和之前,)。

结论

我认为最好的解决方案是:

  • \itttm如果您只需要在数学模式下进行斜体校正。
  • \ttitc它可以处理一些自动插入的更正需要重新更正的情况
  • \entity如果您愿意使用开关( )来切换斜体校正(在 中也*可以使用)。\@ifnextchar\entity

代码

\documentclass{article}
\usepackage{times}
\usepackage{txfonts}
\usepackage{array,multirow,xcolor} %                       for presentation
\def\dont{\color[gray]{.5}} %                              *
\usepackage{xparse}%                                       for \itttp and \entity
\newif\ifmmodebefore%                                      for \itttm

\newcommand*{\somefunction}[1]{F(#1)}

\newcommand*{\ittt}[1]{\textit{\texttt{#1}}}
\newcommand*{\ttit}[1]{\texttt{\textit{#1}}}

\newcommand*{\itttm}[1]{%                                  \itttc inserts italic correction \/ if in math mode
  \ifmmode\mmodebeforetrue\else\mmodebeforefalse\fi%
  \textit{\texttt{#1\ifmmodebefore\/\fi}}%
}

\makeatletter %                                            needed because @ is used in macro name
\newcommand*{\ttitc}[1]{%                                  \ttitc checks if . or , follows and kerns
  \texttt{\textit{#1}}%
  \@ifnextchar.{\kern-.1em}{\@ifnextchar,{\kern-.08em}{}}%
}
\makeatother

\DeclareDocumentCommand{\itttp}{m O{}}{%                   optional punctuation will be typeset italic
  \textit{\texttt{#1}#2\/}%
}

\DeclareDocumentCommand{\entity}{s m}{%                     star = no italic correction (before , and .)
  \textit{\texttt{#2}%
  \IfBooleanTF{#1}%
    {}%
    {\/}%
  }%
}

%\usepackage{lua-visual-debug} % use this with LuaLaTeX for debug-mode
\begin{document}\noindent
\begin{tabular}{l@{}c@{ }c@{ }c}
    macro                &              math               &              \verb|\times|              &               text                \\ \hline&             text mode             \\ \hline
    \verb|\ittt{pd}|     &         $(\ittt{pd} )$          &         $ \ittt{pd} \times {}$          &       \ittt{pd}, \ittt{pd}.       \\ \hline
    \verb|\itttm{pd}|    &         $(\itttm{pd})$          &         $ \itttm{pd} \times {}$         &      \itttm{pd}, \itttm{pd}.      \\
    \verb|\itttp{pd}|    &         $(\itttp{pd})$          &         $ \itttp{pd} \times {}$         &   \dont \itttp{pd}, \itttp{pd}.   \\
    \verb|\itttp{pd}[.]| &               ---               &                   ---                   &    \itttp{pd}[,] \itttp{pd}[.]    \\ \hline
    \verb|\ttit{pd}|     & \multirow{2}{*}{$(\ttit{pd} )$} & \multirow{2}{*}{$ \ttit{pd} \times {}$} &       \ttit{pd}, \ttit{pd}.       \\
    \verb|\ttitc{pd}|    &                                 &                                         &      \ttitc{pd}, \ttitc{pd}.      \\ \hline
    \verb|\entity{pd}|   &         $(\entity{pd})$         &        $ \entity{pd} \times {}$         & \dont   \entity{pd}, \entity{pd}. \\
    \verb|\entity*{pd}|  &               ---               &                   ---                   &    \entity*{pd}, \entity*{pd}.    \\
\end{tabular}


\end{document}

输出

输出表

答案2

如果\texttt\textit交换,则插入斜体更正。同样,在示例中,仅在不在数学模式下\textit才应用于。F

\documentclass{article}
\usepackage{times}
\usepackage{txfonts}

\newcommand*{\somefunction}[1]{%
  \ifmmode\else\expandafter\textit\fi F(#1)%
}
\newcommand*{\ittt}[1]{\textit{\texttt{#1}}}
\newcommand*{\ttit}[1]{\texttt{\textit{#1}}}

\begin{document}

\(\somefunction{\ittt{pd}}\)

\(\somefunction{\ttit{pd}}\)

\(\ittt{pd}a\)

\(\ttit{pd}a\)

\end{document}

结果

相关内容