microtype 在定理环境中无法使用 Times New Roman

microtype 在定理环境中无法使用 Times New Roman

我在用着微型包在我的文档中。但是,它不适合将文本放入定义环境中。以下是代码:

\documentclass[letterpaper]{article}
\usepackage[protrusion=true]{microtype}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{polyglossia}
\setdefaultlanguage{spanish}
\setmainfont[Ligatures=Discretionary]{Times New Roman}

%SECTIONS, THEOREMS,...
%-----------------------------------------------------------------------------------

\theoremstyle{definition}
\newtheorem{theorem}{Teorema}
\newtheorem{definition}{Definición}
\newtheorem{exercise}{Exercise}


\newenvironment{myproof}[1][Solución]{%
  \begin{proof}[#1]$ $\par\nobreak\ignorespaces
}{%
  \end{proof}
}

%----------------------------------------------------------------------------------

\setlength\parindent{0pt}

\begin{document}
\section{Retículo de filtros}
\section{Retículo de filtros}
        
    \begin{definition}
        Sea $L$ un retículo. Un conjunto no vacío $J \subseteq L$ es un \textbf{\textit{ideal}} —respectivamente un \textbf{\textit{filtro}}— si y sólo si
        \begin{enumerate}[label=(\roman*)]
            \itemsep0em 
            \item Si $a,b \in J$, entonces $\sup\{a,b\} \in J$ —resp. $\text{ínf}\{a,b\} \in J$—.
            \item Si $a \in L$, $b \in J$ y $a \leqslant b$ —resp. $a \geq b$—, entonces $a \in J$.
        \end{enumerate}
    \end{definition}
    \begin{myproof}[Demostración]
            
    \end{myproof}
\end{document}

结果如下 在此处输入图片描述

我该如何修复此错误?提前致谢

答案1

使用 XeLaTeX,紧随其后的单词永远不会使用连字符。因此,这个问题与字体或 无关microtype

我建议为这些情况定义一个命令:这样您可以\nobreak\hspace{0pt}在开头的破折号后面添加 hidden in \mbox,这将允许在以下单词中使用连字符,但不允许该破折号出现在行尾。

\documentclass[letterpaper]{article}
\usepackage[protrusion=true]{microtype}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{polyglossia}

\setdefaultlanguage{spanish}
\setmainfont{Times New Roman}

%SECTIONS, THEOREMS,...
%-----------------------------------------------------------------------------------

\theoremstyle{definition}
\newtheorem{theorem}{Teorema}
\newtheorem{definition}{Definición}
\newtheorem{exercise}{Exercise}


\newenvironment{myproof}[1][Solución]{%
  \begin{proof}[#1]\mbox{}\par\nobreak\ignorespaces
}{%
  \end{proof}
}

%----------------------------------------------------------------------------------

\newcommand{\resp}[1]{\mbox{—}\nobreak\hspace{0pt}#1—}
\newcommand{\emphdef}[1]{\textbf{\textit{#1}}}


\begin{document}

\section{Retículo de filtros}
        
\begin{definition}
Sea $L$ un retículo. Un conjunto no vacío $J \subseteq L$ es un 
\emphdef{ideal} \resp{respectivamente un \emphdef{filtro}} si y sólo si
\begin{enumerate}[label=(\roman*),itemsep=0pt]
  \item Si $a,b \in J$, entonces $\sup\{a,b\} \in J$ \resp{resp. $\text{ínf}\{a,b\} \in J$}.
  \item Si $a \in L$, $b \in J$ y $a \leqslant b$ \resp{resp. $a \geq b$}, entonces $a \in J$.
\end{enumerate}
\end{definition}

\begin{myproof}[Demostración]
Whatever.            
\end{myproof}
\end{document}

我还添加了,\emphdef以便您以后可以改变主意,如何强调定义的术语(粗体在我看来,斜体太多了。

注释也itemsep=0pt作为选项,而不是\itemsep直接设置。\mbox{}比笨拙的要好$ $

在此处输入图片描述

Times New Roman选项Ligatures=Discretionary除了产生警告外不执行任何其他操作(至少在我的系统上)。

其他一些建议。文本的 Times 和数学的 Computer Modern 并不真正融合。也\text{ínf}不能保证产生所需的结果(如果当前字体为斜体,它将为斜体)。

您可以加载newtxmath和更改operators字体。spanishoperators=all也会做正确的事情。

\documentclass[letterpaper]{article}
\usepackage[protrusion=true]{microtype}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage[no-math]{fontspec}
\usepackage{polyglossia}
\usepackage{newtxmath}

\setdefaultlanguage[spanishoperators=all]{spanish}
\setmainfont{Times New Roman}

%SECTIONS, THEOREMS,...
%-----------------------------------------------------------------------------------

\theoremstyle{definition}
\newtheorem{theorem}{Teorema}
\newtheorem{definition}{Definición}
\newtheorem{exercise}{Exercise}


\newenvironment{myproof}[1][Solución]{%
  \begin{proof}[#1]\mbox{}\par\nobreak\ignorespaces
}{%
  \end{proof}
}

%----------------------------------------------------------------------------------

\newcommand{\resp}[1]{\mbox{—}\nobreak\hspace{0pt}#1—}
\newcommand{\emphdef}[1]{\textbf{\textit{#1}}}
\DeclareSymbolFont{operators}{\encodingdefault}{\familydefault}{m}{n}

\begin{document}

\section{Retículo de filtros}
        
\begin{definition}
Sea $L$ un retículo. Un conjunto no vacío $J \subseteq L$ es un 
\emphdef{ideal} \resp{respectivamente un \emphdef{filtro}} si y sólo si
\begin{enumerate}[label=(\roman*),itemsep=0pt]
  \item Si $a,b \in J$, entonces $\sup\{a,b\} \in J$ \resp{resp. $\inf\{a,b\} \in J$}.
  \item Si $a \in L$, $b \in J$ y $a \leqslant b$ \resp{resp. $a \geq b$}, entonces $a \in J$.
\end{enumerate}
\end{definition}

\begin{myproof}[Demostración]
Whatever.            
\end{myproof}

\end{document}

在此处输入图片描述

答案2

问题出在“respectivamente”之前的 —。由于 XeLaTeX 将其视为正确的长划线,因此它最终会关闭其后单词的连字符(请注意,该问题与 microtype 无关,即使未加载该包仍会发生)。这是设计使然,通常是首选设置。如果您希望该单词断开,则需要输入一个自由连字符来表示允许断开。

LuaLaTeX 默认情况下会弄乱参数——(因此与 pdfLaTeX 和 XeLaTeX 不同,它会不是一个破折号后面的换行符最终会在那里使用连字符,但这通常不是首选设置。

答案3

不确定为什么这样做有效,但在重新启用“respectivamente”的连字符\hspace{0pt}后插入。

在此处输入图片描述

我肯定也会用\text{ínf}来替换\inf

\documentclass[letterpaper]{article}
\usepackage[protrusion=true]{microtype}
\usepackage{amsmath,amssymb,amsthm}
\theoremstyle{definition}
\newtheorem{definition}{Definición}

\usepackage{enumitem}
\usepackage[spanish]{babel}
\usepackage{unicode-math}

\begin{document}
        
\begin{definition}
Sea $L$ un retículo. Un conjunto no vacío $J \subseteq L$ es un 
\textbf{\textit{ideal}}—\hspace{0pt}respectivamente un 
\textbf{\textit{filtro}}—si y sólo si
\begin{enumerate}[label=(\roman*),noitemsep]    
   \item Si $a,b \in J$, entonces $\sup\{a,b\} \in J$—resp. 
         $\inf\{a,b\}\in J$.
   \item Si $a \in L$, $b \in J$ y $a \leqslant b$—resp. 
         $a \geq b$—, entonces $a \in J$.
\end{enumerate}
\end{definition}
\end{document}

相关内容