
Word permite todo tipo de formato de fuente:
El ejemplo anterior combina tachado/tachado (como este ) y subrayado. Me gustaría poder hacer lo mismo, pero tampoco.ulem
nisoul
permite esto de una manera conveniente.
ulem
:\documentclass{article} \usepackage[a6paper,showframe]{geometry}% Just for this example \usepackage{ulem} \begin{document} Lorem ipsum dolor sit amet, \sout{consectetur adipiscing elit. Praesent} in nisi magna. Mauris \sout{auctor gravida} fermentum. Proin enim \uline{massa, \sout{\textbf{lobortis in} ligula} vel, convallis} fermentum nulla. \uline{Nam in mattis nulla}. Vestibulum vel \uline{auctor orci. Praesent \textit{\textbf{ornare, eros} ac} euismod} congue, turpis est facilisis nisi, a sollicitudin massa lectus imperdiet tellus. Duis at tempor velit. \sout{Nulla \uline{gravida}, dolor in cursus}. \end{document}
soul
:El
soul
documentaciónestablece explícitamente que "soul
los comandos de anidamiento no funcionan":Como tal, el siguiente ejemplo no se compila sin errores:
\documentclass{article} \usepackage[a6paper,showframe]{geometry}% Just for this example \usepackage{soul} \begin{document} Lorem ipsum dolor sit amet, \st{consectetur adipiscing elit. Praesent} in nisi magna. Mauris \st{auctor gravida} fermentum. Proin enim \ul{massa, \st{\textbf{lobortis in} ligula} vel, convallis} fermentum nulla. \ul{Nam in mattis nulla}. Vestibulum vel \ul{auctor orci. Praesent \textit{\textbf{ornare, eros} ac} euismod} congue, turpis est facilisis nisi, a sollicitudin massa lectus imperdiet tellus. Duis at tempor velit. \st{Nulla \ul{gravida}, dolor in cursus}. \end{document}
Idealmente, me gustaría poder usar estas macros de "efecto" de fuente indistintamente: tachado dentro del subrayado o subrayado dentro del tachado sin impacto en el uso de fuentes (comoitálicooatrevido). Aquí está el resultado de Word:
(Ver también la pregunta de seguimiento:Subrayado + tachado usando alma)
Respuesta1
Aquí hay una adaptación de la respuesta de Martin enResaltado de texto interesante en LaTeXdonde lo he definido \tikzst
en base a Martin \tikzul
.
Esto muestra ejemplos de
- tachar y subrayar
- tachar y resaltar
Nota:
Normalmente,
\tikzmark
las soluciones requieren dos ejecuciones. Como hay usos anidados de\tikzmark
, esto requiere al menostrescarreras. (Gracias @Werner por señalar esto).La ejecución adicional es necesaria ya que
tikzmark
las ubicaciones de los anidados dependen de la ubicación de los principales\tikzmark
. Entonces, la primera ejecución estabiliza la ubicación de lo "exterior"\tikzmark
, la segunda estabiliza la ubicación de lo "interior"\tikzmark
y la tercera hace el dibujo real.el
\tikzmark
es deAgregar una llave grande al lado de un cuerpo de texto.
Código:
\documentclass[twoside,11pt]{book}
\usepackage{zref-abspage}
\usepackage{zref-user}
\usepackage{tikz}
\usepackage{atbegshi}
\usetikzlibrary{calc,decorations.pathmorphing}
\makeatletter
\newcommand{\currentsidemargin}{%
\ifodd\zref@extract{textarea-\thetextarea}{abspage}%
\oddsidemargin%
\else%
\evensidemargin%
\fi%
}
\newcounter{textarea}
\newcommand{\settextarea}{%
\stepcounter{textarea}%
\zlabel{textarea-\thetextarea}%
\begin{tikzpicture}[overlay,remember picture]
% Helper nodes
\path (current page.north west) ++(\hoffset, -\voffset)
node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\paperwidth, minimum height=\paperheight]
(pagearea) {};
\path (pagearea.north west) ++(1in+\currentsidemargin,-1in-\topmargin-\headheight-\headsep)
node[anchor=north west, shape=rectangle, inner sep=0, minimum width=\textwidth, minimum height=\textheight]
(textarea) {};
\end{tikzpicture}%
}
\usepackage{lipsum}
\newcommand\xlipsum[1][]{{\let\par\relax\lipsum*[#1]}}
\tikzset{tikzul/.style={yshift=-.75\dp\strutbox}}
\newcounter{tikzul}%
\newcommand\tikzul[1][]{%
\begingroup
\global\tikzullinewidth\linewidth
\def\tikzulsetting{[#1]}%
\stepcounter{tikzul}%
\settextarea
\zlabel{tikzul-begin-\thetikzul}%
\tikz[overlay,remember picture,tikzul] \coordinate (tikzul-\thetikzul) at (0,0);% Modified \tikzmark macro
\ifnum\zref@extract{tikzul-begin-\thetikzul}{abspage}=\zref@extract{tikzul-end-\thetikzul}{abspage}
\else
\AtBeginShipoutNext{\tikzul@endpage{#1}}%
\fi
\bgroup
\def\par{\ifhmode\unskip\fi\egroup\par\@ifnextchar\noindent{\noindent\tikzul[#1]}{\tikzul[#1]\bgroup}}%
\aftergroup\endtikzul
\let\@let@token=%
}
\newlength\tikzullinewidth
\def\tikzul@endpage#1{%
\setbox\AtBeginShipoutBox\hbox{%
\box\AtBeginShipoutBox
\hbox{%
\begin{tikzpicture}[overlay,remember picture,tikzul]
\draw[#1]
let \p1 = (tikzul-\thetikzul), \p2 = ([xshift=\tikzullinewidth+\@totalleftmargin]textarea.south west) in
\ifdim\dimexpr\y1-\y2<.5\baselineskip
(\x1,\y1) -- (\x2,\y1)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west) in
(\x1,\y1) -- +(\tikzullinewidth-\x1+\x3,0)
% (\x3,\y2) -- (\x2,\y2)
(\x3,\y1)
\myloop{\y1-\y2+.5\baselineskip}{%
++(0,-\baselineskip) -- +(\tikzullinewidth,0)
}%
\fi
;
\end{tikzpicture}%
}}%
}%
\def\endtikzul{%
\zlabel{tikzul-end-\thetikzul}%
\ifnum\zref@extract{tikzul-begin-\thetikzul}{abspage}=\zref@extract{tikzul-end-\thetikzul}{abspage}
\begin{tikzpicture}[overlay,remember picture,tikzul]
\expandafter\draw\tikzulsetting
let \p1 = (tikzul-\thetikzul), \p2 = (0,0) in
\ifdim\y1=\y2
(\x1,\y1) -- (\x2,\y2)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
(\x1,\y1) -- +(\tikzullinewidth-\x1+\x3,0)
(\x3,\y2) -- (\x2,\y2)
(\x3,\y1)
\myloop{\y1-\y2}{%
++(0,-\baselineskip) -- +(\tikzullinewidth,0)
}%
\fi
;
\end{tikzpicture}%
\else
\settextarea
\begin{tikzpicture}[overlay,remember picture,tikzul]
\expandafter\draw\tikzulsetting
let \p1 = ([xshift=\@totalleftmargin,yshift=-.5\baselineskip]textarea.north west), \p2 = (0,0) in
\ifdim\dimexpr\y1-\y2<.5\baselineskip
(\x1,\y2) -- (\x2,\y2)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
(\x3,\y2) -- (\x2,\y2)
(\x3,\y2)
\myloop{\y1-\y2}{%
++(0,+\baselineskip) -- +(\tikzullinewidth,0)
}
\fi
;
\end{tikzpicture}%
\fi
\endgroup
}
% -------------------------------------------------------------- Additions by Peter Grill
\tikzset{tikzst/.style={yshift=0.5\dp\strutbox}}
\newcounter{tikzst}%
\newcommand\tikzst[1][]{%
\begingroup
\global\tikzstlinewidth\linewidth
\def\tikzstsetting{[#1]}%
\stepcounter{tikzst}%
\settextarea
\zlabel{tikzst-begin-\thetikzst}%
\tikz[overlay,remember picture,tikzst] \coordinate (tikzst-\thetikzst) at (0,0);% Modified \tikzmark macro
\ifnum\zref@extract{tikzst-begin-\thetikzst}{abspage}=\zref@extract{tikzst-end-\thetikzst}{abspage}
\else
\AtBeginShipoutNext{\tikzst@endpage{#1}}%
\fi
\bgroup
\def\par{\ifhmode\unskip\fi\egroup\par\@ifnextchar\noindent{\noindent\tikzst[#1]}{\tikzst[#1]\bgroup}}%
\aftergroup\endtikzst
\let\@let@token=%
}
\newlength\tikzstlinewidth
\def\tikzst@endpage#1{%
\setbox\AtBeginShipoutBox\hbox{%
\box\AtBeginShipoutBox
\hbox{%
\begin{tikzpicture}[overlay,remember picture,tikzst]
\draw[#1]
let \p1 = (tikzst-\thetikzst), \p2 = ([xshift=\tikzstlinewidth+\@totalleftmargin]textarea.south west) in
\ifdim\dimexpr\y1-\y2<.5\baselineskip
(\x1,\y1) -- (\x2,\y1)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west) in
(\x1,\y1) -- +(\tikzstlinewidth-\x1+\x3,0)
% (\x3,\y2) -- (\x2,\y2)
(\x3,\y1)
\myloop{\y1-\y2+.5\baselineskip}{%
++(0,-\baselineskip) -- +(\tikzstlinewidth,0)
}%
\fi
;
\end{tikzpicture}%
}}%
}%
\def\endtikzst{%
\zlabel{tikzst-end-\thetikzst}%
\ifnum\zref@extract{tikzst-begin-\thetikzst}{abspage}=\zref@extract{tikzst-end-\thetikzst}{abspage}
\begin{tikzpicture}[overlay,remember picture,tikzst]
\expandafter\draw\tikzstsetting
let \p1 = (tikzst-\thetikzst), \p2 = (0,0) in
\ifdim\y1=\y2
(\x1,\y1) -- (\x2,\y2)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
(\x1,\y1) -- +(\tikzstlinewidth-\x1+\x3,0)
(\x3,\y2) -- (\x2,\y2)
(\x3,\y1)
\myloop{\y1-\y2}{%
++(0,-\baselineskip) -- +(\tikzstlinewidth,0)
}%
\fi
;
\end{tikzpicture}%
\else
\settextarea
\begin{tikzpicture}[overlay,remember picture,tikzst]
\expandafter\draw\tikzstsetting
let \p1 = ([xshift=\@totalleftmargin,yshift=-.5\baselineskip]textarea.north west), \p2 = (0,0) in
\ifdim\dimexpr\y1-\y2<.5\baselineskip
(\x1,\y2) -- (\x2,\y2)
\else
let \p3 = ([xshift=\@totalleftmargin]textarea.west), \p4 = ([xshift=-\rightmargin]textarea.east) in
(\x3,\y2) -- (\x2,\y2)
(\x3,\y2)
\myloop{\y1-\y2}{%
++(0,+\baselineskip) -- +(\tikzstlinewidth,0)
}
\fi
;
\end{tikzpicture}%
\fi
\endgroup
}
% --------------------------------------------------------------
\def\myloop#1#2#3{%
#3%
\ifdim\dimexpr#1>1.1\baselineskip
#2%
\expandafter\myloop\expandafter{\the\dimexpr#1-\baselineskip\relax}{#2}%
\fi
}
\makeatother
\begin{document}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text \tikzst[black, ultra thick]{text text text text text
text text text text text text text text} text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
{\tikzset{tikzul/.style={yshift=1ex}}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.
Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus
et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra
metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus
eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretium
quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. \tikzul[line width=1.5\ht\strutbox,semitransparent,yellow]{Aenean
faucibus. Morbi dolor nulla, \tikzst[black, ultra thick]{malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue
eu, accumsan eleifend, sagittis quis}, diam. Duis eget orci sit amet orci dignissim
rutrum.}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
test
}
\begin{quote}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text \tikzst[black, ultra thick]{text text text text text text
text text text text text text text text text text text
text text text text text text text} text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
\end{quote}
{\tikzset{tikzul/.style={yshift=.5ex}}
\begin{quote}
text text text text text text text text text text text
text text text text text text text text text text text
\begin{quote}
text text text text text text text text text text text
text text \tikzul[green]{text text \tikzst[black, ultra thick]{text text text text text text text
text text text text text text text text text text text
text text text text
text text text text text text text}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text} text text text text text text text
\end{quote}
text text text text text text text text text text text
text text text text text text text text text text text
\end{quote}
\large
new text text text text text text text text text text text
text text \tikzul[red]{first text text text text \tikzst[black, ultra thick]{text text text text
teXt teXt teXt teXt teXt teXt teXt teXt teXt teXt teXt
teXt teXt teXt} teXt teXt teXt teXt teXt teXt teXt teXt
teXt teXt teXt last} teXt teXt teXt teXt teXt teXt teXt
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text\par\noindent text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
}
\begin{itemize}
\item \tikzul{test test test} test
\item test \tikzul{test test test} test
\item aa \tikzul{test test test} test
\item b \tikzul{test test
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
test} test
\end{itemize}
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text
text text text text text text text text text
text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
text text \tikzul[red]{text text text text text text text text text
text text
\noindent text text text text text text text text text
\par text text text text} text text text text text text text
text text text text text text text text text text text
text text text text text text text text text text text
\end{document}
Respuesta2
Hay varias opciones; todas las siguientes admiten saltos de línea:
lua-ul
:https://tex.stackexchange.com/a/533377/250119(específico para resaltar+subrayado, la solución más sencilla de usar, funciona de forma predeterminada)- una respuesta personalizada usando
tikz
:https://tex.stackexchange.com/a/176118/250119(permite anidamiento arbitrariopero requiere ≥ 3 compilaciones si es nido) soulpos
: ver mi respuesta enhttps://tex.stackexchange.com/a/685471/250119(específico para resaltar+tachar): es necesario conocer la programación TeX para definir los comandos, y esto requiere 2 compilaciones.soul
:https://tex.stackexchange.com/a/178701/250119(específico para tachado+subrayado): este paquete utiliza inherentemente\leaders
, por lo que la respuesta funciona repitiendo cuadros de 0,1 puntos de ancho, lo que da como resultado un PDF pesado.
Estas solucionesno admite salto de línea:
censor
:https://tex.stackexchange.com/a/178691/250119(específico para tachado+subrayado)soul
con caja de guardado, etc.:https://tex.stackexchange.com/a/418106/250119(específico para resaltado+subrayado)
Para completar, a continuación se muestra una solución que utiliza ulem
en su lugar (adaptar demi respuesta definiendo\dwave
) -- ulem
no tiene la restricción "horizontal uniforme", perono admite la separación de palabrascualquiera:
%! TEX program = lualatex
\documentclass{article}
\usepackage{ulem}
\makeatletter
\protected\def\ulinesout{%
\leavevmode \bgroup
\UL@setULdepth
\markoverwith {%
\rlap{\rule[.55ex]{2pt}{0.4pt}}%
\rule[-\ULdepth]{2pt}{0.4pt}% \rule[-.673ex]{2pt}{0.4pt}
}%
\ULon
}
\makeatother
\begin{document}
\uline{a}\ulinesout{b}\sout{c}
\uline{Producing a colored underline or strike-through is }\ulinesout{not supported by
regular uline}\sout{ or sout, but it is quite easy to colorize using the
markoverwith mechanism}
\end{document}
Como se observa en ulem
la documentación, esta no es una regla "verdaderamente flexible", pero parece imposible en este caso, y esto se basa en la regla repitiendo muchas piezas pequeñas.
Este inconveniente es el mismo que el de la solución del soul
paquete vinculado anteriormente.