考虑MWE:
\documentclass{book}
\usepackage{xcolor}
\newcommand{\myred}[1]{\textcolor{red}{#1}}
\begin{document}
\LARGE
\noindent \textbf{(10)} * \\[-2pt]
\textbf{A.B.C.}
\vspace{15pt}
\noindent \textbf{(1020)} * \\[-2pt]
\textbf{J.Y.Z.}
\vspace{15pt}
\noindent \textbf{(573)} * \\[-2pt]
\textbf{X.Y.Z.}
\vskip 30pt
\noindent \myred{\textbf{(10)} * \\[-2pt]
\hspace*{12pt} \textbf{A.B.C.}}
\vspace{15pt}
\noindent \myred{\textbf{(1020)} * \\[-2pt]
\hspace*{34pt} \textbf{J.Y.Z.}}
\vspace{15pt}
\noindent \myred{\textbf{(573)} * \\[-2pt]
\hspace*{20pt} \textbf{X.Y.Z.}}
\end{document}
和出局
前三行(黑色)表示括号内的数字后跟符号的示例,在本例中用星号表示。
尽管 MWE 中的星号位于所含数字右侧固定的空间内,但在实际文档中不一定如此;即,它可以漂浮。
我必须将下面缩写词中的第二个首字母与上面的星号对齐。
我用红色表示它应该是什么样子。
唉,为了做到这一点,这是一个不断尝试的过程。
如果可能的话,我想使这个过程自动化。
问题:这是否可能?如果可以,我该如何自动将首字母缩略词中的第二个字母(每个字母后面有一个点)与上面的符号(始终固定,但在本例中为星号)对齐,该符号始终出现在所含数字的右侧,但不一定与它保持统一的距离?
谢谢。
答案1
\documentclass{book}
\def\zz#1{%
\begin{tabular}[t]{@{}c@{}}*\\\bfseries\zzz#1\relax\end{tabular}}
\def\zzz#1.#2.#3\relax{\llap{#1.}#2\rlap{.#3}}
\begin{document}
\LARGE
\noindent \textbf{(10)} \zz{A.B.C}
\vspace{15pt}
\noindent \textbf{(1020)} \zz{J.Y.Z.}
\vspace{15pt}
\noindent \textbf{(573)} \zz{X.Y.Z.}
\vspace{15pt}
\noindent \textbf{(573)} some other text \zz{X.Y.Z.}
\end{document}
这是在表格中设置文本,同时隐藏除第二个字母之外的文本宽度。
答案2
您可以使用该zref
包及其savepos
模块:
\documentclass{book}
\usepackage{xcolor} \newcommand{\myred}[1]{\textcolor{red}{#1}}
\usepackage{zref-savepos}
\newcounter{alignmark}
\setcounter{alignmark}{0}
\AtBeginDocument{\zsaveposx{alignmargin}}%
\newcommand{\setalignmark}{%
\stepcounter{alignmark}%
\zsaveposx{alignmark\roman{alignmark}}%
}
\newcommand{\alignatmark}[3][\roman{alignmark}]{%
\hspace*{\dimexpr\zposx{alignmark#1}sp-\zposx{alignmargin}sp\relax}\llap{#2}#3%
}
\begin{document}
\LARGE
\noindent \textbf{(10)} \setalignmark * \\[-2pt]
\alignatmark{\textbf{A.}}{\textbf{B.C.}}
\vspace{15pt}
\noindent \textbf{(1020)} \setalignmark * \\[-2pt]
\alignatmark{\textbf{J.}}{\textbf{Y.Z.}}
\end{document}
使用该savepos
模块,您可以保存页面上的当前位置,然后获取此位置,例如移动某些内容。请注意,位置是从页面左下角计算的。因此,在此示例中,我们需要考虑左边距。如果偶数页和奇数页的边距不同,则此方法需要进行一些调整。