
我是 TeX 和 LaTeX 的新手,我的第一個專案是一個非常雄心勃勃的專案。計劃是用來ltxkeys
定義 D&D 角色扮演遊戲的資料庫條目,然後使用 LaTeX 模板來漂亮地列印角色表、怪物統計數據等。
\documentclass[letterpaper,landscape]{article}
\pagestyle{empty}
\usepackage[T1]{fontenc}%Use a modern font encoding
\usepackage[sfdefault]{noto}
\usepackage[margin=.5in,nohead,nofoot]{geometry}
\usepackage{graphbox}% Loads graphicx automagically.
\usepackage{anyfontsize}
\usepackage{textpos}
\usepackage[tracingkeys]{ltxkeys}
\setlength{\TPHorizModule}{1in}
\setlength{\TPVertModule}{1in}
\makeatletter
% Monster Tent Graphic is 300 DPI with:
% * image size of (600x2250 pixels) 2in x 7.5in
% * monster title of 630x62 pixels (2.1in x .207in)
% Use a Data Key: \DnD{WUMPUS}{image}
\newcommand{\DnD}[2]
{%
{%
\def\c{#1}
\def\v{#2}
\def\t {\csname DnD@KeyFam@\c \endcsname}%
\csname cmd\t @\c @\v \endcsname%
}%
}
% Define a Creature Data Key:
% \DnDNewCreature{WUMPUS}{title="Grand Wumpus", image=..."}
\newcommand{\DnD@NewCreature}[2]%
{%
\ltxkeys@declarekeys[DnD@Creature]{#1}%
{ cmd/\needvalue{title}//;
cmd/\needvalue{image}//;
}%
\expandafter\def\csname DnD@KeyFam@#1\endcsname{DnD@Creature}%
\ltxkeys@setkeys[DnD@Creature]{#1}{#2}%
}
\def\gimg {img/MM167-Goblin-BW.png}
\DnD@NewCreature{GoblinBoss}{title=Goblin Boss,image=img/MM167-Goblin-BW.png}
\begin{document}%
\def\m {GoblinBoss}%
\begin{figure}[t]%
\begin{minipage}{.25\textwidth}%
% \includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{\DnD{GoblinBoss}{image}}
\includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{img/MM167-Goblin-BW.png}%
\includegraphics[smash=cr,totalheight=7.5in,width=2.5in]{img/Monster-Tent.png}%
\begin{textblock}{2.1}(.2,-.42)%
\rotatebox[origin=c]{180}
{\centerline{\fontsize{16}{16}\textbf{\DnD{GoblinBoss}{title}}}}
\end{textblock}
\end{minipage}%
\end{figure}
\end{document}
\makeatother
按原樣,該文件正確呈現怪物帳篷圖像並正確放置所需的圖像和標題,但這只是因為該\includegraphics
命令使用要加載的文件路徑的文字文本,而不是將其從ltxkey
.如果使用第一個註解掉的\includegraphics
指令而不是第二個,我會從 includegraphics 內部收到一個模糊的錯誤,表示有一個"Illegal parameter number in definition of \filename@base"
.
ltxkey
如果我使用\gimg
剛剛定義為圖像檔案路徑的而不是,則它可以工作。如果我嘗試定義在此\gimg
輸入{\DnD{GoblinBoss}{image}}
代碼,它會再次失敗。如果我只是列印它的值,\DnD{GoblinBoss}{image}
它看起來是正確的。任何幫助,將不勝感激。
答案1
您需要定義命令,使其擴展為圖像檔案名稱。
\documentclass[letterpaper,landscape]{article}
\pagestyle{empty}
\usepackage[T1]{fontenc}%Use a modern font encoding
\usepackage[sfdefault]{noto}
\usepackage[margin=.5in,nohead,nofoot]{geometry}
\usepackage{graphbox}% Loads graphicx automagically.
\usepackage{anyfontsize}
\usepackage{textpos}
\usepackage[tracingkeys]{ltxkeys}
\setlength{\TPHorizModule}{1in}
\setlength{\TPVertModule}{1in}
\makeatletter
% Monster Tent Graphic is 300 DPI with:
% * image size of (600x2250 pixels) 2in x 7.5in
% * monster title of 630x62 pixels (2.1in x .207in)
% Use a Data Key: \DnD{WUMPUS}{image}
\newcommand{\badDnD}[2]
{%
{%non expandable group start
\def\c{#1} % non expandable assignment and space token
\def\v{#2} % non expandable assignment and space token
\def\t {\csname DnD@KeyFam@\c \endcsname}% non expandable assignment
\csname cmd\t @\c @\v \endcsname%
}%non expandable group end
}
\newcommand{\DnD}[2]{\csname cmd\csname DnD@KeyFam@#1\endcsname @#1@#2\endcsname}
% Define a Creature Data Key:
% \DnDNewCreature{WUMPUS}{title="Grand Wumpus", image=..."}
\newcommand{\DnD@NewCreature}[2]%
{%
\ltxkeys@declarekeys[DnD@Creature]{#1}%
{ cmd/\needvalue{title}//;
cmd/\needvalue{image}//;
}%
\expandafter\def\csname DnD@KeyFam@#1\endcsname{DnD@Creature}%
\ltxkeys@setkeys[DnD@Creature]{#1}{#2}%
}
\def\gimg {img/MM167-Goblin-BW.png}
\DnD@NewCreature{GoblinBoss}{title=Goblin Boss,image=example-image.png}
\begin{document}%
\def\m {GoblinBoss}%
\begin{figure}[t]%
\begin{minipage}{.25\textwidth}%
\includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{\DnD{GoblinBoss}{image}}
\includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{example-image-a.png}%
\includegraphics[smash=cr,totalheight=7.5in,width=2.5in]{example-image-b.png}%
\begin{textblock}{2.1}(.2,-.42)%
\rotatebox[origin=c]{180}
{\centerline{\fontsize{16}{16}\textbf{\DnD{GoblinBoss}{title}}}}
\end{textblock}
\end{minipage}%
\end{figure}
\end{document}
\makeatother this is never executed