Me gustaría escalar algunas líneas de texto para que se alineen perfectamente tanto a la izquierda como a la derecha. Al usar resizebox* tengo algo que casi funciona, pero hay un pequeño espacio en blanco en los bordes. Cuanto mayor sea el tamaño de fuente, mayor será el espacio en blanco.
\documentclass{article}
\usepackage{graphicx}
\setkeys{Gin}{keepaspectratio} % to maintain aspect ratio of content inside resizebox
\setlength{\fboxsep}{0cm} % So that we can see the exact box around some text
\begin{document}%
\setlength{\parindent}{0cm}
\fbox{\resizebox*{12cm}{2cm}{OOOOOOOOOOOOOOOOOOOOOO}}\\%
\fbox{\resizebox*{12cm}{2cm}{OOOOOOOOOOOOOO}}\\%
\fbox{\resizebox*{12cm}{2cm}{OOOOOO}}\\%
\end{document}
Produce una salida como esta:
Respuesta1
Si está dispuesto a utilizar XeLaTeX, puede hacerlo sin tener que adivinar.
\documentclass{article}
\usepackage{fontspec}
\usepackage{graphicx}
\newcommand{\removeleft}[1]{%
\leavevmode\kern-\XeTeXglyphbounds1 \the\XeTeXcharglyph`#1\relax
#1%
}
\newcommand{\removeright}[1]{%
#1%
\kern-\XeTeXglyphbounds3 \the\XeTeXcharglyph`#1\relax
}
\setlength{\parindent}{0pt}
\setlength{\fboxsep}{0pt}
\begin{document}
\fbox{\resizebox{12cm}{!}{\removeleft{O}OOOOOOOOOOOOOOOOOOOO\removeright{O}}}
\fbox{\resizebox{12cm}{!}{\removeleft{O}OOOOOOOOOOOO\removeright{O}}}
\fbox{\resizebox{12cm}{!}{\removeleft{O}OOOO\removeright{O}}}
\end{document}
El truco se explica en la documentación de XeTeX. Primero obtenemos el número de glifo del primer carácter, luego medimos su orientación lateral izquierda. Lo mismo ocurre con el último.
Con algún expl3
truco podemos evitar separar la primera y la última letra:
\documentclass{article}
\usepackage{fontspec}
\usepackage{graphicx}
\newcommand{\remove}[2]{%
\leavevmode\kern-\XeTeXglyphbounds#2\space\the\XeTeXcharglyph`#1\relax
}
\ExplSyntaxOn
\cs_set_eq:NN \tobyone_remove_sb:nn \remove
\cs_generate_variant:Nn \tobyone_remove_sb:nn { fn }
\NewDocumentCommand{\removesidebearings}{m}
{
\tobyone_remove_sb:fn { \tl_head:n { #1 } } { 1 }% left
#1
\tobyone_remove_sb:fn { \tl_head:f { \tl_reverse:n { #1 } } } { 3 }
}
\ExplSyntaxOff
\setlength{\parindent}{0pt}
\setlength{\fboxsep}{0pt}
\begin{document}
\fbox{\resizebox{12cm}{!}{\removesidebearings{OOOOOOOOOOOOOOOOOOOOOO}}}
\fbox{\resizebox{12cm}{!}{\removesidebearings{OOOOOOOOOOOOOO}}}
\fbox{\resizebox{12cm}{!}{\removesidebearings{OOOOOO}}}
\end{document}
Si también necesita los caracteres especiales de TeX, agregue las siguientes definiciones y use los "nombres simbólicos".
\documentclass{article}
\usepackage{fontspec}
\usepackage{graphicx}
\newcommand{\remove}[2]{%
\leavevmode\kern-\XeTeXglyphbounds#2\space\the\XeTeXcharglyph`#1\relax
}
\ExplSyntaxOn
\cs_set_eq:NN \tobyone_remove_sb:nn \remove
\cs_generate_variant:Nn \tobyone_remove_sb:nn { fn }
\NewDocumentCommand{\removesidebearings}{m}
{
\tobyone_remove_sb:fn { \tl_head:n { #1 } } { 1 }% left
#1
\tobyone_remove_sb:fn { \tl_head:f { \tl_reverse:n { #1 } } } { 3 }
}
\cs_set_eq:NN \ampersandchar \c_ampersand_str
\cs_set_eq:NN \backslashchar \c_backslash_str
\cs_set_eq:NN \leftbracechar \c_left_brace_str
\cs_set_eq:NN \rightbracechar \c_right_brace_str
\cs_set_eq:NN \circumflexchar \c_circumflex_str
\cs_set_eq:NN \dollarchar \c_dollar_str
\cs_set_eq:NN \hashchar \c_hash_str
\cs_set_eq:NN \percentchar \c_percent_str
\cs_set_eq:NN \tildechar \c_tilde_str
\cs_set_eq:NN \underscorechar \c_underscore_str
\ExplSyntaxOff
\setlength{\parindent}{0pt}
\setlength{\fboxsep}{0pt}
\begin{document}
\fbox{\resizebox{12cm}{!}{\removesidebearings{\dollarchar abc\rightbracechar}}}
\fbox{\resizebox{12cm}{!}{\dollarchar abc\rightbracechar}}
\end{document}
Respuesta2
Esto funciona, pero se basa en prueba y error (no hay una solución limpia):
\documentclass{article}
\usepackage{graphicx}
\setkeys{Gin}{keepaspectratio} % to maintain aspect ratio of content inside resizebox
\setlength{\fboxsep}{0cm} % So that we can see the exact box around some text
\newlength\mycor
\mycor=-0.555428pt
\begin{document}%
\setlength{\parindent}{0cm}
\fbox{\resizebox*{12cm}{2cm}{\hspace*{\mycor}OOOOOOOOOOOOOOOOOOOOOO}\hspace*{\mycor}}\\%
\fbox{\resizebox*{12cm}{2cm}{\hspace*{\mycor}OOOOOOOOOOOOOO\hspace*{\mycor}}}\\%
\fbox{\resizebox*{12cm}{2cm}{\hspace*{\mycor}OOOOOO\hspace*{\mycor}}}\\%
\end{document}