我在用着微型包在我的文档中。但是,它不适合将文本放入定义环境中。以下是代码:
\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}