独立于字体样式的直立标点

独立于字体样式的直立标点

有没有办法把所有的标点符号(逗号、句号、冒号、分号等)都变成罗马字母,即使当前的活动样式是斜体? 我正在使用mathtime包和字体进行设置,标签如下:

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[T1,mtbold]{mathtime}
\usepackage{times}
\begin{document}
\itshape Cool animals: Wombat, Capybara; Duck and Dove (no Pigeons).
\end{document}

答案1

(我在 ctt 上的回答的副本)

使用虚拟字体是可能的:您可以创建一个从罗马字体中获取标点符号的字体。使用 pdflatex 需要几个小时的工作(如果您还想微调字距,则需要更多时间)以及一些有关字体(特别是 fontinst)的知识。使用 lualatex 可以更快一些。

您还可以激活标点符号并定义它们以切换到 \upshape。但请注意,这很危险——您可能会破坏其他命令。例如,句号和点通常用于数字。

 \documentclass{book}
 \usepackage[english]{babel}
 \usepackage[T1]{fontenc}
    %\usepackage[T1,mtbold]{mathtime}
 \usepackage{times}
  \defineshorthand{.}{\textup{.}}
  \defineshorthand{,}{\textup{,}}
  \defineshorthand{;}{\textup{;}}

 \useshorthands*{,}
 \useshorthands*{.}
 \useshorthands*{;}
 \begin{document}
 \itshape abc, abc; abc.

 \shorthandoff{,}\shorthandoff{.}\shorthandoff{;}
  abc, abc; abc.

 \end{document}

在此处输入图片描述

答案2

您可以使用 LuaTeXpost_linebreak_filter来实现这一点。

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage{times}

\usepackage{luacode}

\begin{luacode*}
function table.contains(t, k)
    for _, v in pairs(t) do
        if v == k then
            return true
        end
    end
    return false
end

function upright_punctucation(head)
    -- Traverse vertical list
    for line in node.traverse_id(node.id("hhead"),head) do
       -- Traverse horizontal list
       for glyph in node.traverse_id(node.id("glyph"), line.head) do
           -- Check if the glyph is
           --                   (   )   ,   :   ;
           if (table.contains({ 40, 41, 44, 58, 59 }, glyph.char)) then
               -- and change its font to upright.
               -- (this is not so generic, 15 just happens to be upright)
               glyph.font = 15
           end
       end
    end
    return head
end

luatexbase.add_to_callback("post_linebreak_filter",upright_punctucation,"upright_punctucation")
\end{luacode*}

\begin{document}
\itshape Cool animals: Wombat, Capybara; Duck and Dove (no Pigeons).
\end{document}

在此处输入图片描述

相关内容