我在数学模式下使用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}