Ich möchte einige Textzeilen so skalieren, dass sie links und rechts perfekt ausgerichtet sind. Mit resizebox* habe ich etwas, das fast funktioniert, aber an den Rändern bleibt ein winziger Leerraum. Je größer die Schriftgröße, desto größer der Leerraum.
\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}
Die Ausgabe sieht wie folgt aus:
Antwort1
Wenn Sie bereit sind, XeLaTeX zu verwenden, können Sie dies ohne Rätselraten tun.
\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}
Der Trick wird in der Dokumentation zu XeTeX erklärt. Zuerst ermitteln wir die Glyphennummer des ersten Zeichens und messen dann seinen linken Seitenabstand. Gleiches gilt für das letzte.
Mit einem expl3
Trick können wir die Trennung von Anfangs- und Endbuchstaben vermeiden:
\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}
Wenn Sie auch die Sonderzeichen von TeX benötigen, fügen Sie Definitionen wie folgt hinzu und verwenden Sie die „symbolischen Namen“.
\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}
Antwort2
Dies funktioniert, basiert jedoch auf Versuch und Irrtum (keine saubere Lösung):
\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}